如何让undetected chromedriver适配不同Chrome版本并自动下载驱动?
如何让undetected-chromedriver自动适配不同Chrome版本?
问题场景
我有如下代码,在安装了Chrome 122的电脑上可正常运行:
import undetected_chromedriver as uc driver = uc.Chrome() driver.get('https://ballzy.eu/en/men/sport/shoes')
但在安装了其他Chrome版本(如120)的电脑上运行时,出现如下错误:
(selenium) C:\DEV\Fiverr\ORDER\stefamn_jan669_jankore_janxx2\Ballzy>python test3.py Traceback (most recent call last): File "C:\DEV\Fiverr\ORDER\stefamn_jan669_jankore_janxx2\Ballzy\test3.py", line 2, in <module> driver = uc.Chrome(version_main=122) File "C:\DEV\.venv\selenium\lib\site-packages\undetected_chromedriver\__init__.py", line 466, in __init__ super(Chrome, self).__init__( File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 45, in __init__ super().__init__( File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\chromium\webdriver.py", line 61, in __init__ super().__init__(command_executor=executor, options=options) File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 208, in __init__ self.start_session(capabilities) File "C:\DEV\.venv\selenium\lib\site-packages\undetected_chromedriver\__init__.py", line 724, in start_session super(selenium.webdriver.chrome.webdriver.WebDriver, self).start_session( File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 292, in start_session response = self.execute(Command.NEW_SESSION, caps)["value"] File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 347, in execute self.error_handler.check_response(response) File "C:\DEV\.venv\selenium\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: cannot connect to chrome at 127.0.0.1:50596 from session not created: This version of ChromeDriver only supports Chrome version 122 Current browser version is 120.0.6099.200
使用标准Selenium驱动时,只需如下定义即可在多台电脑上正常运行:
srv=Service() driver = webdriver.Chrome(service=srv, options=options)
请问如何让undetected chromedriver也实现该功能,自动下载对应版本的ChromeDriver以适配不同电脑上的Chrome版本?
解决方案
方法1:利用undetected-chromedriver自带的自动检测机制
不手动指定version_main参数,undetected-chromedriver会自动检测本地安装的Chrome版本,并下载匹配的ChromeDriver:
import undetected_chromedriver as uc driver = uc.Chrome() # 自动检测Chrome版本并匹配驱动 driver.get('https://ballzy.eu/en/men/sport/shoes')
方法2:结合Selenium的Service类管理驱动
复用你熟悉的Selenium Service自动下载逻辑,将其传入uc.Chrome():
from selenium.webdriver.chrome.service import Service import undetected_chromedriver as uc # Selenium自动下载匹配的ChromeDriver srv = Service() # 将Service实例传给undetected-chromedriver driver = uc.Chrome(service=srv) driver.get('https://ballzy.eu/en/men/sport/shoes')
方法3:手动检测Chrome版本后指定(更可控)
如果需要明确控制版本,可以先获取本地Chrome的主版本号,再传入version_main:
import undetected_chromedriver as uc from undetected_chromedriver import version as uc_version # 获取本地Chrome的主版本号(如120、122) chrome_main_version = int(uc_version.get_chrome_version().split('.')[0]) driver = uc.Chrome(version_main=chrome_main_version) driver.get('https://ballzy.eu/en/men/sport/shoes')
注意事项
- 确保你的
undetected-chromedriver是最新版本,旧版本可能存在自动适配逻辑不完善的问题,可通过pip install --upgrade undetected-chromedriver更新 - 运行程序时需要网络连接,以便自动下载对应版本的ChromeDriver
- 确保程序有写入驱动文件的权限(部分系统可能需要管理员权限)
内容的提问来源于stack exchange,提问作者Rapid1898
相关产品推荐
相关产品推荐

