2024-03-22, fixbug for nodriver
							parent
							
								
									60785369ea
								
							
						
					
					
						commit
						1c3acaf764
					
				| 
						 | 
				
			
			@ -44,7 +44,7 @@ except Exception as exc:
 | 
			
		|||
    print(exc)
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.21)"
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.22)"
 | 
			
		||||
 | 
			
		||||
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
 | 
			
		||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
 | 
			
		||||
| 
						 | 
				
			
			@ -167,6 +167,10 @@ def get_config_dict(args):
 | 
			
		|||
                if len(args.proxy_server) > 2:
 | 
			
		||||
                    config_dict["advanced"]["proxy_server_port"] = args.proxy_server
 | 
			
		||||
 | 
			
		||||
            if not args.window_size is None:
 | 
			
		||||
                if len(args.window_size) > 2:
 | 
			
		||||
                    config_dict["advanced"]["window_size"] = args.window_size
 | 
			
		||||
 | 
			
		||||
            # special case for headless to enable away from keyboard mode.
 | 
			
		||||
            is_headless_enable_ocr = False
 | 
			
		||||
            if config_dict["advanced"]["headless"]:
 | 
			
		||||
| 
						 | 
				
			
			@ -241,17 +245,43 @@ def get_chrome_options(webdriver_path, config_dict):
 | 
			
		|||
        chrome_options.add_argument('--headless=new')
 | 
			
		||||
 | 
			
		||||
    chrome_options.add_argument("--user-agent=%s" % (USER_AGENT))
 | 
			
		||||
    chrome_options.add_argument("--password-store=basic")
 | 
			
		||||
    chrome_options.add_argument("--disable-animations")
 | 
			
		||||
    chrome_options.add_argument("--disable-background-networking")
 | 
			
		||||
    chrome_options.add_argument("--disable-backgrounding-occluded-windows")
 | 
			
		||||
    chrome_options.add_argument("--disable-bookmark-reordering")
 | 
			
		||||
    chrome_options.add_argument("--disable-boot-animation")
 | 
			
		||||
    chrome_options.add_argument("--disable-breakpad")
 | 
			
		||||
    chrome_options.add_argument("--disable-canvas-aa")
 | 
			
		||||
    chrome_options.add_argument("--disable-client-side-phishing-detection")
 | 
			
		||||
    chrome_options.add_argument("--disable-cloud-import")
 | 
			
		||||
    chrome_options.add_argument("--disable-component-cloud-policy")
 | 
			
		||||
    chrome_options.add_argument("--disable-component-update")
 | 
			
		||||
    chrome_options.add_argument("--disable-composited-antialiasing")
 | 
			
		||||
    chrome_options.add_argument("--disable-default-apps")
 | 
			
		||||
    chrome_options.add_argument("--disable-dev-shm-usage")
 | 
			
		||||
    chrome_options.add_argument("--disable-device-discovery-notifications")
 | 
			
		||||
    chrome_options.add_argument("--disable-dinosaur-easter-egg")
 | 
			
		||||
    chrome_options.add_argument("--disable-domain-reliability")
 | 
			
		||||
    chrome_options.add_argument("--disable-features=IsolateOrigins,site-per-process,TranslateUI")
 | 
			
		||||
    chrome_options.add_argument("--disable-infobars")
 | 
			
		||||
    chrome_options.add_argument("--disable-logging")
 | 
			
		||||
    chrome_options.add_argument("--disable-login-animations")
 | 
			
		||||
    chrome_options.add_argument("--disable-login-screen-apps")
 | 
			
		||||
    chrome_options.add_argument("--disable-notifications")
 | 
			
		||||
    chrome_options.add_argument("--disable-popup-blocking")
 | 
			
		||||
    chrome_options.add_argument("--disable-print-preview")
 | 
			
		||||
    chrome_options.add_argument("--disable-renderer-backgrounding")
 | 
			
		||||
    chrome_options.add_argument("--disable-session-crashed-bubble")
 | 
			
		||||
    chrome_options.add_argument("--disable-smooth-scrolling")
 | 
			
		||||
    chrome_options.add_argument("--disable-sync")
 | 
			
		||||
    chrome_options.add_argument("--no-sandbox");
 | 
			
		||||
    chrome_options.add_argument('--disable-features=TranslateUI')
 | 
			
		||||
    chrome_options.add_argument('--disable-translate')
 | 
			
		||||
    chrome_options.add_argument('--lang=zh-TW')
 | 
			
		||||
    chrome_options.add_argument("--disable-translate")
 | 
			
		||||
    chrome_options.add_argument("--lang=zh-TW")
 | 
			
		||||
    chrome_options.add_argument("--no-default-browser-check")
 | 
			
		||||
    chrome_options.add_argument("--no-first-run")
 | 
			
		||||
    chrome_options.add_argument("--no-pings")
 | 
			
		||||
    chrome_options.add_argument("--no-sandbox")
 | 
			
		||||
    chrome_options.add_argument("--no-service-autorun")
 | 
			
		||||
 | 
			
		||||
    # for navigator.webdriver
 | 
			
		||||
    chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])
 | 
			
		||||
| 
						 | 
				
			
			@ -381,19 +411,43 @@ def get_uc_options(uc, config_dict, webdriver_path):
 | 
			
		|||
        options.add_argument('--headless=new')
 | 
			
		||||
 | 
			
		||||
    options.add_argument("--user-agent=%s" % (USER_AGENT))
 | 
			
		||||
    options.add_argument("--password-store=basic")
 | 
			
		||||
    options.add_argument("--disable-animations")
 | 
			
		||||
    options.add_argument("--disable-background-networking")
 | 
			
		||||
    options.add_argument("--disable-backgrounding-occluded-windows")
 | 
			
		||||
    options.add_argument("--disable-bookmark-reordering")
 | 
			
		||||
    options.add_argument("--disable-boot-animation")
 | 
			
		||||
    options.add_argument("--disable-breakpad")
 | 
			
		||||
    options.add_argument("--disable-canvas-aa")
 | 
			
		||||
    options.add_argument("--disable-client-side-phishing-detection")
 | 
			
		||||
    options.add_argument("--disable-cloud-import")
 | 
			
		||||
    options.add_argument("--disable-component-cloud-policy")
 | 
			
		||||
    options.add_argument("--disable-component-update")
 | 
			
		||||
    options.add_argument("--disable-composited-antialiasing")
 | 
			
		||||
    options.add_argument("--disable-default-apps")
 | 
			
		||||
    options.add_argument("--disable-dev-shm-usage")
 | 
			
		||||
    options.add_argument("--disable-device-discovery-notifications")
 | 
			
		||||
    options.add_argument("--disable-dinosaur-easter-egg")
 | 
			
		||||
    options.add_argument("--disable-domain-reliability")
 | 
			
		||||
    options.add_argument("--disable-features=IsolateOrigins,site-per-process,TranslateUI")
 | 
			
		||||
    options.add_argument("--disable-infobars")
 | 
			
		||||
    options.add_argument("--disable-logging")
 | 
			
		||||
    options.add_argument("--disable-login-animations")
 | 
			
		||||
    options.add_argument("--disable-login-screen-apps")
 | 
			
		||||
    options.add_argument("--disable-notifications")
 | 
			
		||||
    options.add_argument("--disable-popup-blocking")
 | 
			
		||||
    options.add_argument("--disable-print-preview")
 | 
			
		||||
    options.add_argument("--disable-renderer-backgrounding")
 | 
			
		||||
    options.add_argument("--disable-session-crashed-bubble")
 | 
			
		||||
    options.add_argument("--disable-smooth-scrolling")
 | 
			
		||||
    options.add_argument("--disable-sync")
 | 
			
		||||
    options.add_argument("--no-sandbox");
 | 
			
		||||
    options.add_argument('--disable-features=TranslateUI')
 | 
			
		||||
    options.add_argument('--disable-translate')
 | 
			
		||||
    options.add_argument('--lang=zh-TW')
 | 
			
		||||
 | 
			
		||||
    options.add_argument("--password-store=basic")
 | 
			
		||||
    options.add_argument("--disable-translate")
 | 
			
		||||
    options.add_argument("--lang=zh-TW")
 | 
			
		||||
    options.add_argument("--no-default-browser-check")
 | 
			
		||||
    options.add_argument("--no-first-run")
 | 
			
		||||
    options.add_argument("--no-pings")
 | 
			
		||||
    options.add_argument("--no-sandbox")
 | 
			
		||||
    options.add_argument("--no-service-autorun")
 | 
			
		||||
    options.add_experimental_option("prefs", {"credentials_enable_service": False, "profile.password_manager_enabled": False, "translate":{"enabled": False}})
 | 
			
		||||
 | 
			
		||||
    if len(config_dict["advanced"]["proxy_server_port"]) > 2:
 | 
			
		||||
| 
						 | 
				
			
			@ -11076,6 +11130,10 @@ def cli():
 | 
			
		|||
        choices=['chrome','firefox','edge','safari','brave'],
 | 
			
		||||
        type=str)
 | 
			
		||||
 | 
			
		||||
    parser.add_argument("--window_size",
 | 
			
		||||
        help="Window size",
 | 
			
		||||
        type=str)
 | 
			
		||||
 | 
			
		||||
    parser.add_argument("--proxy_server",
 | 
			
		||||
        help="overwrite proxy server, format: ip:port",
 | 
			
		||||
        type=str)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,14 +18,13 @@ import base64
 | 
			
		|||
import json
 | 
			
		||||
import os
 | 
			
		||||
import platform
 | 
			
		||||
import subprocess
 | 
			
		||||
import sys
 | 
			
		||||
import threading
 | 
			
		||||
import webbrowser
 | 
			
		||||
 | 
			
		||||
import util
 | 
			
		||||
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.21)"
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.22)"
 | 
			
		||||
 | 
			
		||||
CONST_MAXBOT_LAUNCHER_FILE = "config_launcher.json"
 | 
			
		||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
 | 
			
		||||
| 
						 | 
				
			
			@ -304,54 +303,8 @@ def btn_items_run_event(event):
 | 
			
		|||
    btn_index = int(str(event.widget['text']).split(" ")[1])
 | 
			
		||||
    global txt_file_name
 | 
			
		||||
    filename=txt_file_name[btn_index-1].get().strip()
 | 
			
		||||
    threading.Thread(target=launch_maxbot, args=(filename,)).start()
 | 
			
		||||
 | 
			
		||||
def launch_maxbot(filename, homepage="", kktix_account = "", kktix_password=""):
 | 
			
		||||
    cmd_argument = []
 | 
			
		||||
    if len(filename) > 0:
 | 
			
		||||
        cmd_argument.append('--input=' + filename)
 | 
			
		||||
    if len(homepage) > 0:
 | 
			
		||||
        cmd_argument.append('--homepage=' + homepage)
 | 
			
		||||
    if len(kktix_account) > 0:
 | 
			
		||||
        cmd_argument.append('--kktix_account=' + kktix_account)
 | 
			
		||||
    if len(kktix_password) > 0:
 | 
			
		||||
        cmd_argument.append('--kktix_password=' + kktix_password)
 | 
			
		||||
 | 
			
		||||
    working_dir = os.path.dirname(os.path.realpath(__file__))
 | 
			
		||||
    if hasattr(sys, 'frozen'):
 | 
			
		||||
        print("execute in frozen mode")
 | 
			
		||||
        # check platform here.
 | 
			
		||||
        cmd = './chrome_tixcraft' + ' '.join(cmd_argument)
 | 
			
		||||
        if platform.system() == 'Darwin':
 | 
			
		||||
            print("execute MacOS python script")
 | 
			
		||||
        if platform.system() == 'Linux':
 | 
			
		||||
            print("execute linux binary")
 | 
			
		||||
        if platform.system() == 'Windows':
 | 
			
		||||
            print("execute .exe binary.")
 | 
			
		||||
            cmd = 'chrome_tixcraft.exe ' + ' '.join(cmd_argument)
 | 
			
		||||
        subprocess.Popen(cmd, shell=True, cwd=working_dir)
 | 
			
		||||
    else:
 | 
			
		||||
        interpreter_binary = 'python'
 | 
			
		||||
        interpreter_binary_alt = 'python3'
 | 
			
		||||
        if platform.system() != 'Windows':
 | 
			
		||||
            interpreter_binary = 'python3'
 | 
			
		||||
            interpreter_binary_alt = 'python'
 | 
			
		||||
        print("execute in shell mode.")
 | 
			
		||||
 | 
			
		||||
    script_name = "chrome_tixcraft"
 | 
			
		||||
        try:
 | 
			
		||||
            print('try', interpreter_binary)
 | 
			
		||||
            cmd_array = [interpreter_binary, script_name + '.py'] + cmd_argument
 | 
			
		||||
            s=subprocess.Popen(cmd_array, cwd=working_dir)
 | 
			
		||||
        except Exception as exc:
 | 
			
		||||
            print('try', interpreter_binary_alt)
 | 
			
		||||
            try:
 | 
			
		||||
                cmd_array = [interpreter_binary_alt, script_name + '.py'] + cmd_argument
 | 
			
		||||
                s=subprocess.Popen(cmd_array, cwd=working_dir)
 | 
			
		||||
            except Exception as exc:
 | 
			
		||||
                msg=str(exc)
 | 
			
		||||
                print("exeption:", msg)
 | 
			
		||||
                pass
 | 
			
		||||
    threading.Thread(target=util.launch_maxbot, args=(script_name,filename,)).start()
 | 
			
		||||
 | 
			
		||||
def ConfigListTab(root, config_dict, language_code, UI_PADDING_X):
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ import requests
 | 
			
		|||
 | 
			
		||||
import util
 | 
			
		||||
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.21)"
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.22)"
 | 
			
		||||
 | 
			
		||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
 | 
			
		||||
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ from datetime import datetime
 | 
			
		|||
 | 
			
		||||
import util
 | 
			
		||||
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.21)"
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.22)"
 | 
			
		||||
 | 
			
		||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
 | 
			
		||||
CONST_MAXBOT_KKTIX_CONFIG_FILE = "kktix.json"
 | 
			
		||||
| 
						 | 
				
			
			@ -294,54 +294,8 @@ def btn_items_run_event(event):
 | 
			
		|||
    btn_index = 1
 | 
			
		||||
    global txt_file_name
 | 
			
		||||
    filename=txt_file_name[btn_index-1].get().strip()
 | 
			
		||||
    threading.Thread(target=launch_maxbot, args=(filename,)).start()
 | 
			
		||||
 | 
			
		||||
def launch_maxbot(filename, homepage="", kktix_account = "", kktix_password=""):
 | 
			
		||||
    cmd_argument = []
 | 
			
		||||
    if len(filename) > 0:
 | 
			
		||||
        cmd_argument.append('--input=' + filename)
 | 
			
		||||
    if len(homepage) > 0:
 | 
			
		||||
        cmd_argument.append('--homepage=' + homepage)
 | 
			
		||||
    if len(kktix_account) > 0:
 | 
			
		||||
        cmd_argument.append('--kktix_account=' + kktix_account)
 | 
			
		||||
    if len(kktix_password) > 0:
 | 
			
		||||
        cmd_argument.append('--kktix_password=' + kktix_password)
 | 
			
		||||
 | 
			
		||||
    working_dir = os.path.dirname(os.path.realpath(__file__))
 | 
			
		||||
    if hasattr(sys, 'frozen'):
 | 
			
		||||
        print("execute in frozen mode")
 | 
			
		||||
        # check platform here.
 | 
			
		||||
        cmd = './chrome_tixcraft' + ' '.join(cmd_argument)
 | 
			
		||||
        if platform.system() == 'Darwin':
 | 
			
		||||
            print("execute MacOS python script")
 | 
			
		||||
        if platform.system() == 'Linux':
 | 
			
		||||
            print("execute linux binary")
 | 
			
		||||
        if platform.system() == 'Windows':
 | 
			
		||||
            print("execute .exe binary.")
 | 
			
		||||
            cmd = 'chrome_tixcraft.exe ' + ' '.join(cmd_argument)
 | 
			
		||||
        subprocess.Popen(cmd, shell=True, cwd=working_dir)
 | 
			
		||||
    else:
 | 
			
		||||
        interpreter_binary = 'python'
 | 
			
		||||
        interpreter_binary_alt = 'python3'
 | 
			
		||||
        if platform.system() != 'Windows':
 | 
			
		||||
            interpreter_binary = 'python3'
 | 
			
		||||
            interpreter_binary_alt = 'python'
 | 
			
		||||
        print("execute in shell mode.")
 | 
			
		||||
 | 
			
		||||
    script_name = "chrome_tixcraft"
 | 
			
		||||
        try:
 | 
			
		||||
            print('try', interpreter_binary)
 | 
			
		||||
            cmd_array = [interpreter_binary, script_name + '.py'] + cmd_argument
 | 
			
		||||
            s=subprocess.Popen(cmd_array, cwd=working_dir)
 | 
			
		||||
        except Exception as exc:
 | 
			
		||||
            print('try', interpreter_binary_alt)
 | 
			
		||||
            try:
 | 
			
		||||
                cmd_array = [interpreter_binary_alt, script_name + '.py'] + cmd_argument
 | 
			
		||||
                s=subprocess.Popen(cmd_array, cwd=working_dir)
 | 
			
		||||
            except Exception as exc:
 | 
			
		||||
                msg=str(exc)
 | 
			
		||||
                print("exeption:", msg)
 | 
			
		||||
                pass
 | 
			
		||||
    threading.Thread(target=util.launch_maxbot, args=(script_name,filename,)).start()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def ConfigListTab(root, config_dict, language_code, UI_PADDING_X):
 | 
			
		||||
| 
						 | 
				
			
			@ -840,9 +794,12 @@ def kktix_status_query(config_dict, last_status, log_file=False):
 | 
			
		|||
                    print(config_dict["ticket_exec_maxbot"])
 | 
			
		||||
                    if config_dict["ticket_exec_maxbot"]:
 | 
			
		||||
                        filename=config_dict["list"][btn_index-1]
 | 
			
		||||
                        print("filename", filename)
 | 
			
		||||
                        #print("filename", filename)
 | 
			
		||||
                        script_name = "chrome_tixcraft"
 | 
			
		||||
                        if config_dict["advanced"]["webdriver_type"]=="nodriver":
 | 
			
		||||
                            script_name = "nodriver_tixcraft"
 | 
			
		||||
                        if len(filename) > 0:
 | 
			
		||||
                            threading.Thread(target=launch_maxbot, args=(filename,)).start()
 | 
			
		||||
                            threading.Thread(target=util.launch_maxbot, args=(script_name, filename,)).start()
 | 
			
		||||
 | 
			
		||||
                    print(config_dict["ticket_exec_command"], config_dict["new_process"])
 | 
			
		||||
                    if config_dict["ticket_exec_command"]:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,7 @@ except Exception as exc:
 | 
			
		|||
    print(exc)
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.21)"
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.22)"
 | 
			
		||||
 | 
			
		||||
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
 | 
			
		||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
 | 
			
		||||
| 
						 | 
				
			
			@ -150,6 +150,11 @@ def get_config_dict(args):
 | 
			
		|||
                if len(args.proxy_server) > 2:
 | 
			
		||||
                    config_dict["advanced"]["proxy_server_port"] = args.proxy_server
 | 
			
		||||
 | 
			
		||||
            if not args.window_size is None:
 | 
			
		||||
                if len(args.window_size) > 2:
 | 
			
		||||
                    config_dict["advanced"]["window_size"] = args.window_size
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            # special case for headless to enable away from keyboard mode.
 | 
			
		||||
            is_headless_enable_ocr = False
 | 
			
		||||
            if config_dict["advanced"]["headless"]:
 | 
			
		||||
| 
						 | 
				
			
			@ -896,7 +901,6 @@ def get_nodriver_browser_args():
 | 
			
		|||
        "--disable-component-cloud-policy",
 | 
			
		||||
        "--disable-component-update",
 | 
			
		||||
        "--disable-composited-antialiasing",
 | 
			
		||||
        "--disable-d3d11",
 | 
			
		||||
        "--disable-default-apps",
 | 
			
		||||
        "--disable-dev-shm-usage",
 | 
			
		||||
        "--disable-device-discovery-notifications",
 | 
			
		||||
| 
						 | 
				
			
			@ -912,7 +916,6 @@ def get_nodriver_browser_args():
 | 
			
		|||
        "--disable-password-generation",
 | 
			
		||||
        "--disable-popup-blocking",
 | 
			
		||||
        "--disable-renderer-backgrounding",
 | 
			
		||||
        "--disable-renderer-backgrounding",
 | 
			
		||||
        "--disable-session-crashed-bubble",
 | 
			
		||||
        "--disable-smooth-scrolling",
 | 
			
		||||
        "--disable-sync",
 | 
			
		||||
| 
						 | 
				
			
			@ -944,7 +947,8 @@ def get_maxbot_plus_extension_path():
 | 
			
		|||
 | 
			
		||||
def get_extension_config(config_dict):
 | 
			
		||||
    default_lang = "zh-TW"
 | 
			
		||||
    conf = Config(browser_args=get_nodriver_browser_args(), lang=default_lang, headless=config_dict["advanced"]["headless"])
 | 
			
		||||
    no_sandbox=True
 | 
			
		||||
    conf = Config(browser_args=get_nodriver_browser_args(), lang=default_lang, no_sandbox=no_sandbox, headless=config_dict["advanced"]["headless"])
 | 
			
		||||
    conf.add_extension(get_maxbot_plus_extension_path())
 | 
			
		||||
    return conf
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1003,24 +1007,36 @@ async def nodrver_block_urls(tab, config_dict):
 | 
			
		|||
    await tab.send(cdp.network.set_blocked_ur_ls(NETWORK_BLOCKED_URLS))
 | 
			
		||||
    return tab
 | 
			
		||||
 | 
			
		||||
async def nodriver_resize_window(tab, config_dict):
 | 
			
		||||
    if len(config_dict["advanced"]["window_size"]) > 0:
 | 
			
		||||
        if "," in config_dict["advanced"]["window_size"]:
 | 
			
		||||
            size_array = config_dict["advanced"]["window_size"].split(",")
 | 
			
		||||
            position_left = 0
 | 
			
		||||
            if len(size_array) >= 3:
 | 
			
		||||
                position_left = int(size_array[0]) * int(size_array[2])
 | 
			
		||||
            #tab = await driver.main_tab()
 | 
			
		||||
            if tab:
 | 
			
		||||
                await tab.set_window_size(left=position_left, top=30, width=int(size_array[0]), height=int(size_array[1]))
 | 
			
		||||
 | 
			
		||||
async def main(args):
 | 
			
		||||
    config_dict = get_config_dict(args)
 | 
			
		||||
 | 
			
		||||
    driver = None
 | 
			
		||||
    tab = None
 | 
			
		||||
    if not config_dict is None:
 | 
			
		||||
        sandbox = False
 | 
			
		||||
        conf = get_extension_config(config_dict)
 | 
			
		||||
        # PS: nodrirver run twice always cause error:
 | 
			
		||||
        # Failed to connect to browser
 | 
			
		||||
        # One of the causes could be when you are running as root.
 | 
			
		||||
        # In that case you need to pass no_sandbox=True
 | 
			
		||||
        #driver = await uc.start(conf, sandbox=sandbox, headless=config_dict["advanced"]["headless"])
 | 
			
		||||
        driver = await uc.start(conf)
 | 
			
		||||
        if not driver is None:
 | 
			
		||||
            tab = await nodriver_goto_homepage(driver, config_dict)
 | 
			
		||||
            tab = await nodrver_block_urls(tab, config_dict)
 | 
			
		||||
            if not config_dict["advanced"]["headless"]:
 | 
			
		||||
                if len(config_dict["advanced"]["window_size"]) > 0:
 | 
			
		||||
                    if "," in config_dict["advanced"]["window_size"]:
 | 
			
		||||
                        target_array = config_dict["advanced"]["window_size"].split(",")
 | 
			
		||||
                        #tab = await driver.main_tab()
 | 
			
		||||
                        if tab:
 | 
			
		||||
                            await tab.set_window_size(left=30, top=30, width=int(target_array[0]), height=int(target_array[1]))
 | 
			
		||||
                await nodriver_resize_window(tab, config_dict)
 | 
			
		||||
        else:
 | 
			
		||||
            print("無法使用nodriver,程式無法繼續工作")
 | 
			
		||||
            sys.exit()
 | 
			
		||||
| 
						 | 
				
			
			@ -1177,6 +1193,10 @@ def cli():
 | 
			
		|||
        choices=['chrome','firefox','edge','safari','brave'],
 | 
			
		||||
        type=str)
 | 
			
		||||
 | 
			
		||||
    parser.add_argument("--window_size",
 | 
			
		||||
        help="Window size",
 | 
			
		||||
        type=str)
 | 
			
		||||
 | 
			
		||||
    parser.add_argument("--proxy_server",
 | 
			
		||||
        help="overwrite proxy server, format: ip:port",
 | 
			
		||||
        type=str)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@ cryptography
 | 
			
		|||
ddddocr
 | 
			
		||||
idna
 | 
			
		||||
looseversion
 | 
			
		||||
nodriver
 | 
			
		||||
numpy
 | 
			
		||||
Pillow
 | 
			
		||||
playsound==1.2.2
 | 
			
		||||
| 
						 | 
				
			
			@ -13,3 +14,5 @@ selenium
 | 
			
		|||
tornado
 | 
			
		||||
undetected-chromedriver
 | 
			
		||||
urllib3
 | 
			
		||||
#PS: nodriver need python 3.9+
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -80,7 +80,7 @@
 | 
			
		|||
        "reset_browser_interval": 0,
 | 
			
		||||
        "max_dwell_time": 60,
 | 
			
		||||
        "proxy_server_port": "",
 | 
			
		||||
        "window_size": "512,1024",
 | 
			
		||||
        "window_size": "480,1024",
 | 
			
		||||
        "idle_keyword": "",
 | 
			
		||||
        "resume_keyword": "",
 | 
			
		||||
        "idle_keyword_second": "",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										74
									
								
								settings.py
								
								
								
								
							
							
						
						
									
										74
									
								
								settings.py
								
								
								
								
							| 
						 | 
				
			
			@ -41,7 +41,7 @@ try:
 | 
			
		|||
except Exception as exc:
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.21)"
 | 
			
		||||
CONST_APP_VERSION = "MaxBot (2024.03.22)"
 | 
			
		||||
 | 
			
		||||
CONST_MAXBOT_ANSWER_ONLINE_FILE = "MAXBOT_ONLINE_ANSWER.txt"
 | 
			
		||||
CONST_MAXBOT_CONFIG_FILE = "settings.json"
 | 
			
		||||
| 
						 | 
				
			
			@ -685,7 +685,7 @@ def get_default_config():
 | 
			
		|||
    config_dict["advanced"]["reset_browser_interval"] = 0
 | 
			
		||||
    config_dict["advanced"]["max_dwell_time"] = 60
 | 
			
		||||
    config_dict["advanced"]["proxy_server_port"] = ""
 | 
			
		||||
    config_dict["advanced"]["window_size"] = "512,1024"
 | 
			
		||||
    config_dict["advanced"]["window_size"] = "480,1024"
 | 
			
		||||
 | 
			
		||||
    config_dict["advanced"]["idle_keyword"] = ""
 | 
			
		||||
    config_dict["advanced"]["resume_keyword"] = ""
 | 
			
		||||
| 
						 | 
				
			
			@ -755,7 +755,8 @@ def btn_launcher_clicked(language_code):
 | 
			
		|||
    Root_Dir = ""
 | 
			
		||||
    save_ret = btn_save_act(slience_mode=True)
 | 
			
		||||
    if save_ret:
 | 
			
		||||
        run_python_script("config_launcher")
 | 
			
		||||
        script_name = "config_launcher"
 | 
			
		||||
        threading.Thread(target=util.launch_maxbot, args=(script_name,)).start()
 | 
			
		||||
 | 
			
		||||
def btn_save_clicked():
 | 
			
		||||
    btn_save_act()
 | 
			
		||||
| 
						 | 
				
			
			@ -1114,16 +1115,33 @@ def btn_run_clicked(language_code):
 | 
			
		|||
    save_ret = btn_save_act(slience_mode=True)
 | 
			
		||||
    print("save config result:", save_ret)
 | 
			
		||||
    if save_ret:
 | 
			
		||||
        threading.Thread(target=launch_maxbot).start()
 | 
			
		||||
        launch_maxbot()
 | 
			
		||||
 | 
			
		||||
def launch_maxbot():
 | 
			
		||||
    global launch_counter
 | 
			
		||||
    if "launch_counter" in globals():
 | 
			
		||||
        launch_counter += 1
 | 
			
		||||
    else:
 | 
			
		||||
        launch_counter = 0
 | 
			
		||||
    global combo_webdriver_type
 | 
			
		||||
    webdriver_type = combo_webdriver_type.get().strip()
 | 
			
		||||
 | 
			
		||||
    python_script_name = "chrome_tixcraft"
 | 
			
		||||
    script_name = "chrome_tixcraft"
 | 
			
		||||
    if webdriver_type == CONST_WEBDRIVER_TYPE_NODRIVER:
 | 
			
		||||
        python_script_name = "nodriver_tixcraft"
 | 
			
		||||
    run_python_script(python_script_name)
 | 
			
		||||
        script_name = "nodriver_tixcraft"
 | 
			
		||||
 | 
			
		||||
    global txt_window_size
 | 
			
		||||
    window_size = txt_window_size.get().strip()
 | 
			
		||||
    if len(window_size) > 0:
 | 
			
		||||
        if "," in window_size:
 | 
			
		||||
            size_array = window_size.split(",")
 | 
			
		||||
            target_width = int(size_array[0])
 | 
			
		||||
            target_left = launch_counter * launch_counter
 | 
			
		||||
            if target_left > 1440:
 | 
			
		||||
                launch_counter = 0
 | 
			
		||||
            window_size = window_size + "," + str(launch_counter)
 | 
			
		||||
 | 
			
		||||
    threading.Thread(target=util.launch_maxbot, args=(script_name,"","","","",window_size,)).start()
 | 
			
		||||
 | 
			
		||||
def show_preview_text():
 | 
			
		||||
    if os.path.exists(CONST_MAXBOT_ANSWER_ONLINE_FILE):
 | 
			
		||||
| 
						 | 
				
			
			@ -1173,42 +1191,6 @@ def btn_preview_text_clicked():
 | 
			
		|||
                break
 | 
			
		||||
    show_preview_text()
 | 
			
		||||
 | 
			
		||||
def run_python_script(script_name):
 | 
			
		||||
    working_dir = os.path.dirname(os.path.realpath(__file__))
 | 
			
		||||
    cmd_argument = ""
 | 
			
		||||
    if hasattr(sys, 'frozen'):
 | 
			
		||||
        print("execute in frozen mode")
 | 
			
		||||
 | 
			
		||||
        cmd = './' + script_name + cmd_argument
 | 
			
		||||
        # check platform here.
 | 
			
		||||
        if platform.system() == 'Darwin':
 | 
			
		||||
            print("execute MacOS python script")
 | 
			
		||||
        if platform.system() == 'Linux':
 | 
			
		||||
            print("execute linux binary")
 | 
			
		||||
        if platform.system() == 'Windows':
 | 
			
		||||
            print("execute .exe binary.")
 | 
			
		||||
            cmd = script_name + ".exe" + cmd_argument
 | 
			
		||||
        subprocess.Popen(cmd, shell=True, cwd=working_dir)
 | 
			
		||||
    else:
 | 
			
		||||
        interpreter_binary = 'python'
 | 
			
		||||
        interpreter_binary_alt = 'python3'
 | 
			
		||||
        if platform.system() != 'Windows':
 | 
			
		||||
            interpreter_binary = 'python3'
 | 
			
		||||
            interpreter_binary_alt = 'python'
 | 
			
		||||
        print("execute in shell mode.")
 | 
			
		||||
        
 | 
			
		||||
        cmd = script_name + '.py'
 | 
			
		||||
        try:
 | 
			
		||||
            print('try', interpreter_binary)
 | 
			
		||||
            s=subprocess.Popen([interpreter_binary, cmd], cwd=working_dir)
 | 
			
		||||
        except Exception as exc:
 | 
			
		||||
            print('try', interpreter_binary_alt)
 | 
			
		||||
            try:
 | 
			
		||||
                s=subprocess.Popen([interpreter_binary_alt, cmd], cwd=working_dir)
 | 
			
		||||
            except Exception as exc:
 | 
			
		||||
                msg=str(exc)
 | 
			
		||||
                print("exeption:", msg)
 | 
			
		||||
                pass
 | 
			
		||||
 | 
			
		||||
def btn_open_text_server_clicked():
 | 
			
		||||
    global tab4
 | 
			
		||||
| 
						 | 
				
			
			@ -3085,11 +3067,11 @@ def main_gui():
 | 
			
		|||
 | 
			
		||||
    load_GUI(root, config_dict)
 | 
			
		||||
 | 
			
		||||
    GUI_SIZE_WIDTH = 580
 | 
			
		||||
    GUI_SIZE_HEIGHT = 640
 | 
			
		||||
    GUI_SIZE_WIDTH = 590
 | 
			
		||||
    GUI_SIZE_HEIGHT = 645
 | 
			
		||||
 | 
			
		||||
    GUI_SIZE_MACOS = str(GUI_SIZE_WIDTH) + 'x' + str(GUI_SIZE_HEIGHT)
 | 
			
		||||
    GUI_SIZE_WINDOWS=str(GUI_SIZE_WIDTH-60) + 'x' + str(GUI_SIZE_HEIGHT-70)
 | 
			
		||||
    GUI_SIZE_WINDOWS=str(GUI_SIZE_WIDTH-70) + 'x' + str(GUI_SIZE_HEIGHT-80)
 | 
			
		||||
 | 
			
		||||
    GUI_SIZE =GUI_SIZE_MACOS
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
{"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_sound": {"ticket": true, "order": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "facebook_password_plaintext": "", "kktix_password_plaintext": "", "fami_password_plaintext": "", "urbtix_password_plaintext": "", "cityline_password_plaintext": "", "hkticketing_password_plaintext": "", "kham_password_plaintext": "", "ticket_password_plaintext": "", "udn_password_plaintext": "", "ticketplus_password_plaintext": "", "chrome_extension": true, "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.05, "reset_browser_interval": 0, "max_dwell_time": 60, "proxy_server_port": "", "window_size": "512,1024", "idle_keyword": "", "resume_keyword": "", "idle_keyword_second": "", "resume_keyword_second": ""}, "domain_filter": ["*google-analytics.com/*", "*googletagmanager.com/*", "*googletagservices.com/*", "*lndata.com/*", "*a.amnet.tw/*", "*adx.c.appier.net/*", "*clarity.ms/*", "*cloudfront.com/*", "*cms.analytics.yahoo.com/*", "*doubleclick.net/*", "*e2elog.fetnet.net/*", "*fundingchoicesmessages.google.com/*", "*ghtinc.com/*", "*match.adsrvr.org/*", "*onead.onevision.com.tw/*", "*popin.cc/*", "*rollbar.com/*", "*sb.scorecardresearch.com/*", "*tagtoo.co/*", "*.ssp.hinet.net/*", "*ticketmaster.sg/js/adblock*", "*.googlesyndication.com/*", "*treasuredata.com/*", "*play.google.com/log?*", "*www.youtube.com/youtubei/v1/player/heartbeat*", "*tixcraft.com/js/analytics.js*", "*ticketmaster.sg/js/adblock.js*", "*img.uniicreative.com/*", "*cdn.cookielaw.org/*", "*tixcraft.com/js/custom.js*", "*tixcraft.com/js/common.js*", "*cdnjs.cloudflare.com/ajax/libs/clipboard.js/*"]}
 | 
			
		||||
{"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_sound": {"ticket": true, "order": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "facebook_password_plaintext": "", "kktix_password_plaintext": "", "fami_password_plaintext": "", "urbtix_password_plaintext": "", "cityline_password_plaintext": "", "hkticketing_password_plaintext": "", "kham_password_plaintext": "", "ticket_password_plaintext": "", "udn_password_plaintext": "", "ticketplus_password_plaintext": "", "chrome_extension": true, "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.05, "reset_browser_interval": 0, "max_dwell_time": 60, "proxy_server_port": "", "window_size": "480,1024,1", "idle_keyword": "", "resume_keyword": "", "idle_keyword_second": "", "resume_keyword_second": ""}, "domain_filter": ["*google-analytics.com/*", "*googletagmanager.com/*", "*googletagservices.com/*", "*lndata.com/*", "*a.amnet.tw/*", "*adx.c.appier.net/*", "*clarity.ms/*", "*cloudfront.com/*", "*cms.analytics.yahoo.com/*", "*doubleclick.net/*", "*e2elog.fetnet.net/*", "*fundingchoicesmessages.google.com/*", "*ghtinc.com/*", "*match.adsrvr.org/*", "*onead.onevision.com.tw/*", "*popin.cc/*", "*rollbar.com/*", "*sb.scorecardresearch.com/*", "*tagtoo.co/*", "*.ssp.hinet.net/*", "*ticketmaster.sg/js/adblock*", "*.googlesyndication.com/*", "*treasuredata.com/*", "*play.google.com/log?*", "*www.youtube.com/youtubei/v1/player/heartbeat*", "*tixcraft.com/js/analytics.js*", "*ticketmaster.sg/js/adblock.js*", "*img.uniicreative.com/*", "*cdn.cookielaw.org/*", "*tixcraft.com/js/custom.js*", "*tixcraft.com/js/common.js*", "*cdnjs.cloudflare.com/ajax/libs/clipboard.js/*"]}
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
{"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_sound": {"ticket": true, "order": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "facebook_password_plaintext": "", "kktix_password_plaintext": "", "fami_password_plaintext": "", "urbtix_password_plaintext": "", "cityline_password_plaintext": "", "hkticketing_password_plaintext": "", "kham_password_plaintext": "", "ticket_password_plaintext": "", "udn_password_plaintext": "", "ticketplus_password_plaintext": "", "chrome_extension": true, "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.05, "reset_browser_interval": 0, "max_dwell_time": 60, "proxy_server_port": "", "window_size": "512,1024", "idle_keyword": "", "resume_keyword": "", "idle_keyword_second": "", "resume_keyword_second": ""}}
 | 
			
		||||
{"homepage": "https://tixcraft.com", "browser": "chrome", "language": "\u7e41\u9ad4\u4e2d\u6587", "ticket_number": 2, "ocr_captcha": {"enable": true, "beta": true, "force_submit": true, "image_source": "canvas"}, "webdriver_type": "undetected_chromedriver", "date_auto_select": {"enable": true, "date_keyword": "", "mode": "random"}, "area_auto_select": {"enable": true, "mode": "random", "area_keyword": ""}, "keyword_exclude": "\"\u8f2a\u6905\",\"\u8eab\u969c\",\"\u8eab\u5fc3 \u969c\u7919\",\"Restricted View\",\"\u71c8\u67f1\u906e\u853d\",\"\u8996\u7dda\u4e0d\u5b8c\u6574\"", "kktix": {"auto_press_next_step_button": true, "auto_fill_ticket_number": true}, "tixcraft": {"pass_date_is_sold_out": true, "auto_reload_coming_soon_page": true}, "advanced": {"play_sound": {"ticket": true, "order": true, "filename": "ding-dong.wav"}, "tixcraft_sid": "", "ibonqware": "", "facebook_account": "", "kktix_account": "", "fami_account": "", "cityline_account": "", "urbtix_account": "", "hkticketing_account": "", "kham_account": "", "ticket_account": "", "udn_account": "", "ticketplus_account": "", "facebook_password": "", "kktix_password": "", "fami_password": "", "urbtix_password": "", "cityline_password": "", "hkticketing_password": "", "kham_password": "", "ticket_password": "", "udn_password": "", "ticketplus_password": "", "facebook_password_plaintext": "", "kktix_password_plaintext": "", "fami_password_plaintext": "", "urbtix_password_plaintext": "", "cityline_password_plaintext": "", "hkticketing_password_plaintext": "", "kham_password_plaintext": "", "ticket_password_plaintext": "", "udn_password_plaintext": "", "ticketplus_password_plaintext": "", "chrome_extension": true, "disable_adjacent_seat": false, "hide_some_image": true, "block_facebook_network": false, "headless": false, "verbose": false, "auto_guess_options": true, "user_guess_string": "", "remote_url": "\"http://127.0.0.1:16888/\"", "auto_reload_page_interval": 0.05, "reset_browser_interval": 0, "max_dwell_time": 60, "proxy_server_port": "", "window_size": "480,1024,1", "idle_keyword": "", "resume_keyword": "", "idle_keyword_second": "", "resume_keyword_second": ""}}
 | 
			
		||||
		Loading…
	
		Reference in New Issue