我有以下代码,它在当前安装了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

有没有可能会自动下载正确的chromedriver

(当我使用普通的selenium驱动程序时-我只使用以下驱动程序定义,它在几台计算机上都可以很好地工作)

srv=Service()
  driver = webdriver.Chrome (service=srv, options=options) 

我怎么也能做到这一点与未检测到的ChromeDriver,以便它是工作在不同的Chrome版本安装在不同的计算机上?

推荐答案

对于undetected-chromedriver,如果你不想使用最新的可用驱动程序版本来匹配Chrome,你必须更新version_main Arg到uc.Chrome().例如:

import undetected_chromedriver as uc

driver = uc.Chrome(version_main=120)

或者,你也可以在UC模式下使用https://github.com/seleniumbase/SeleniumBase,这基本上是undetected-chromedriver,但有一些改进,比如自动获得与你的Chrome版本兼容的chromeDriver版本.设置uc=True以在SeleniumBase脚本中激活UC模式.下面是一个例子:

from seleniumbase import Driver

driver = Driver(uc=True)

这里有一些关于它的文档:https://github.com/seleniumbase/SeleniumBase/issues/2213

这里有一个更大的 playbook :

from seleniumbase import Driver

driver = Driver(uc=True)
driver.get("https://nowsecure.nl/#relax")
# DO MORE STUFF
driver.quit()

要在加载具有bot检测服务的URL时自定义重新连接时间,您可以将get()行替换为以下内容:

driver.uc_open_with_reconnect("https://nowsecure.nl/#relax", reconnect_time=5)

(reconnect_time是ChromeDriver与Chrome重新连接之前的等待时间.在时间到之前,一个网站无法检测到selenium,但这也意味着selenium还不能向Chrome发出命令.)

Python相关问答推荐

通过优化空间在Python中的饼图中添加标签

具有多个选项的计数_匹配

如何在msgraph.GraphServiceClient上进行身份验证?

使用numpy提取数据块

韦尔福德方差与Numpy方差不同

如何删除索引过go 的lexsort深度可能会影响性能?' &>

可变参数数量的重载类型(args或kwargs)

删除所有列值,但判断是否存在任何二元组

如果值发生变化,则列上的极性累积和

Asyncio:如何从子进程中读取stdout?

删除marplotlib条形图上的底边

Pandas Data Wrangling/Dataframe Assignment

OpenGL仅渲染第二个三角形,第一个三角形不可见

用SymPy在Python中求解指数函数

如果有2个或3个,则从pandas列中删除空格

GPT python SDK引入了大量开销/错误超时

提取最内层嵌套链接

来自Airflow Connection的额外参数

查找查找表中存在的列值组合

将鼠标悬停在海运`pairplot`的批注/高亮显示上