在 selenium / Undetected-Chromedriver 在 chrome 137+ 無法 load extension, 在 nodriver 的解法如下:
browser_args.append("--disable-features=DisableLoadExtensionCommandLineSwitch")
完整一點點的範例如下:
from nodriver.core.config import Config
def get_nodriver_browser_args():
browser_args = [
"--disable-animations",
"--disable-app-info-dialog-mac",
"--disable-background-networking",
"--disable-backgrounding-occluded-windows",
"--disable-breakpad",
"--disable-component-update",
"--disable-default-apps",
"--disable-dev-shm-usage",
"--disable-device-discovery-notifications",
"--disable-dinosaur-easter-egg",
"--disable-domain-reliability",
"--disable-features=IsolateOrigins,site-per-process,TranslateUI",
"--disable-infobars",
"--disable-logging",
"--disable-login-animations",
"--disable-login-screen-apps",
"--disable-notifications",
"--disable-password-generation",
"--disable-popup-blocking",
"--disable-renderer-backgrounding",
"--disable-session-crashed-bubble",
"--disable-smooth-scrolling",
"--disable-suggestions-ui",
"--disable-sync",
"--disable-translate",
"--hide-crash-restore-bubble",
"--homepage=about:blank",
"--no-default-browser-check",
"--no-first-run",
"--no-pings",
"--no-service-autorun",
"--password-store=basic",
"--remote-debugging-host=127.0.0.1",
#"--disable-remote-fonts",
]
return browser_args
def get_extension_config(config_dict):
no_sandbox=True
browser_args = get_nodriver_browser_args()
if len(config_dict["advanced"]["proxy_server_port"]) > 2:
browser_args.append('--proxy-server=%s' % config_dict["advanced"]["proxy_server_port"])
browser_args.append("--disable-features=DisableLoadExtensionCommandLineSwitch")
conf = Config(browser_args=browser_args, no_sandbox=no_sandbox, headless=config_dict["advanced"]["headless"])
if config_dict["advanced"]["chrome_extension"]:
ext = get_maxbot_extension_path(CONST_MAXBOT_EXTENSION_NAME)
if len(ext) > 0:
clone_ext = ext.replace(CONST_MAXBOT_EXTENSION_NAME, "tmp_" + CONST_MAXBOT_EXTENSION_NAME + "_" + config_dict["token"])
if not os.path.exists(clone_ext):
os.mkdir(clone_ext)
util.copytree(ext, clone_ext)
conf.add_extension(clone_ext)
util.dump_settings_to_maxbot_plus_extension(clone_ext, config_dict, CONST_MAXBOT_CONFIG_FILE)
ext = get_maxbot_extension_path(CONST_MAXBLOCK_EXTENSION_NAME)
if len(ext) > 0:
clone_ext = ext.replace(CONST_MAXBLOCK_EXTENSION_NAME, "tmp_" + CONST_MAXBLOCK_EXTENSION_NAME + "_" + config_dict["token"])
if not os.path.exists(clone_ext):
os.mkdir(clone_ext)
util.copytree(ext, clone_ext)
conf.add_extension(clone_ext)
util.dump_settings_to_maxblock_plus_extension(ext, config_dict, CONST_MAXBOT_CONFIG_FILE, CONST_MAXBLOCK_EXTENSION_FILTER)
return conf
呼叫上列副程式的範例:
conf = get_extension_config(config_dict)
driver = await uc.start(conf)