使用undetected-chromedriver时Chrome Options被默认配置覆盖的问题
问题:undetected-chromedriver覆盖自定义Chrome Options配置
在Ubuntu环境下使用Python的Selenium结合undetected-chromedriver时,自定义设置的Chrome Options(如user-data-dir、window-size)会被库自动添加的默认选项覆盖,导致实际生效的配置与脚本指定不一致。
环境详情
ubuntu:latest Python 3.10.12 selenium==4.12.0 undetected_chromedriver==3.5.3 Google Chrome 116.0.5845.140 (Official Build) (64-bit) ChromeDriver 116.0.5845.96
问题复现代码
from undetected_chromedriver import Chrome, ChromeOptions self.user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" options = ChromeOptions() options.add_argument("--user-agent=" + self.user_agent) options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-gpu") options.add_argument("--window-size=1280x720") self.driver:Chrome = Chrome( options=options, user_data_dir=self.sessionFolderPath, )
查看chrome://version的命令行参数可发现,自定义的window-size和user-data-dir被后续添加的默认配置覆盖,需要让自定义配置优先生效。
解决方法
1. 调整user-data-dir的传递方式
不要将user-data-dir作为Chrome构造函数的参数传入,而是通过options.add_argument添加到ChromeOptions中,避免被库后续添加的默认参数覆盖:
options.add_argument(f"--user-data-dir={self.sessionFolderPath}")
2. 确保window-size生效
如果命令行参数仍被覆盖,可在启动浏览器后直接调用Selenium的窗口大小设置方法,绕开命令行参数的冲突:
self.driver.set_window_size(1280, 720)
修改后的完整代码
from undetected_chromedriver import Chrome, ChromeOptions self.user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" options = ChromeOptions() options.add_argument("--user-agent=" + self.user_agent) options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-gpu") options.add_argument("--window-size=1280x720") # 将user-data-dir添加到options中 options.add_argument(f"--user-data-dir={self.sessionFolderPath}") self.driver: Chrome = Chrome(options=options) # 强制设置窗口大小,确保生效 self.driver.set_window_size(1280, 720)
内容的提问来源于stack exchange,提问作者Pencilcase
相关产品推荐
相关产品推荐

