Selenium WebDriver Chrome 115停止工作

26
我在Windows上安装了Chrome 115.0.5790.99,并使用Selenium 4.10.0。在我的Python代码中,我调用了service = Service(ChromeDriverManager().install()),但返回了错误ValueError: There is no such driver by url https://chromedriver.storage.googleapis.com/LATEST_RELEASE_115.0.5790.。我使用ChromeDriverManager().install()来确保使用最新稳定版本的webdriver。如何解决这个问题?
我的简单代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import time 
 
# Install Webdriver
service = Service(ChromeDriverManager().install())
 
# Create Driver Instance
driver = webdriver.Chrome(service=service)
 
# Get Web Page
driver.get('https://www.crawler-test.com')
time.sleep(5)
driver.quit()

错误输出:
Traceback (most recent call last):
  File "C:\Users\Administrator\Documents\...\test.py", line 7, in <module>
    service = Service(ChromeDriverManager().install())
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\chrome.py", line 39, in install
    driver_path = self._get_driver_path(self.driver)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\core\manager.py", line 30, in _get_driver_path
    file = self._download_manager.download_file(driver.get_driver_download_url())
                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\drivers\chrome.py", line 40, in get_driver_download_url
    driver_version_to_download = self.get_driver_version_to_download()
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\core\driver.py", line 51, in get_driver_version_to_download
    self._driver_to_download_version = self._version if self._version not in (None, "latest") else self.get_latest_release_version()
                                                                                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\drivers\chrome.py", line 62, in get_latest_release_version
    resp = self._http_client.get(url=latest_release_url)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\core\http.py", line 37, in get
    self.validate_response(resp)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\webdriver_manager\core\http.py", line 16, in validate_response
    raise ValueError(f"There is no such driver by url {resp.url}")
ValueError: There is no such driver by url https://chromedriver.storage.googleapis.com/LATEST_RELEASE_115.0.5790

我尝试了以下方法,但都没有成功: 有没有什么建议可以解决这个问题,直到Chrome 115的webdriver最终在这里发布 https://chromedriver.chromium.org/downloads

你使用的是哪个版本的Selenium?参考链接:https://dev59.com/n1J0hooBIXSAPYfQ8CHi#76463081 - Shawn
你使用的是哪个版本的Selenium?请参考这个链接 - https://dev59.com/n1J0hooBIXSAPYfQ8CHi#76463081 - Shawn
14个回答

33
Selenium Manager现在已经完全包含在selenium 4.10.0中,所以这就是你所需要的全部内容:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service

service = Service()
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=service, options=options)
# ...
driver.quit()

如果在您的系统路径中找不到驱动程序,Selenium Manager将自动下载它。
如果你想知道为什么现在看到了关于ChromeDriverManager的错误,那是因为https://chromedriver.chromium.org/downloads只支持到114版本,这是由于Chromium团队对新的Chrome-for-Testing进行了驱动重组造成的。

这对我来说有效,使用了已安装的Chrome 115;webdriver下载了它能找到的最新版本的chromedriver(114): 获取chromedriver 115版本时出错。尝试使用chromedriver 114(第1次/共5次)我需要将我的代码从: browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)改为browser = webdriver.Chrome(service=Service(), options=chrome_options) - horace_vr
这对我有用,安装了Chrome 115;webdriver下载了它能找到的最新版本的chromedriver(114): 获取chromedriver 115版本时出错。尝试使用chromedriver 114(第1次/共5次)我需要将我的代码从: browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)改为browser = webdriver.Chrome(service=Service(), options=chrome_options) - horace_vr
2
selenium刚刚发布了适用于Python的4.11.2版本,支持更新的chromedriver。请确保在Chrome 116发布之前进行升级,以避免出现错误。 - Michael Mintz
1
这个答案应该被视为解决方案!在 Selenium 的 4.8 版本之后,SeleniumManager 已经被包含在 Selenium 中。这个实现使得不再需要实施第三方库,比如 "webdriver-manager" 或类似的。@MichaelMintz 发布的代码片段是正确的使用方式,我建议将 Selenium 更新到最新版本 4.11.2,因为它修复了一些 Selenium Manager 的错误(仍在测试中)。阅读此处获取更多信息:https://www.selenium.dev/blog/2022/introducing-selenium-manager/ - Andreito95

9
这对我有用:
 service = Service(ChromeDriverManager(version="114.0.5735.90").install())

1
这个方法不再起作用了。有没有其他解决办法,而不需要更新Selenium? - Catalin

7
不确定您使用的是哪个版本的selenium,如果您使用的是最新版本,比如selenium v4.6.0或更高版本,您就不需要使用第三方库,比如WebDriverManager来处理浏览器驱动程序。您的代码可以简化如下:
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.crawler-test.com")
print(driver.title)

结果:

Crawler Test Site

Process finished with exit code 0
更新:ChromeWebDriverManager与确保WebDriver的稳定版本无关,它用于确保根据您系统中的浏览器版本使用正确的驱动程序二进制文件(chormedriver.exe)。话虽如此,现在有了selenium v4.6.0或更高版本,selenium内置工具SeleniumManager将处理浏览器驱动程序。换句话说,SeleniumManager将完成WebDriverManager过去的工作。

参考:介绍Selenium Manager


1
为了确保使用最新的 webdriver 稳定版本,我使用 ChromeDriverManager().install()。它适用于 114 及以下的版本。 - TaKo
请检查我的更新答案。如果有任何疑问,请告诉我。 - Shawn
那么,不需要使用ChromeDriverManager().install()吗?我如何在实践中使用SeleniumManager? - TaKo
2
不需要。如果你的selenium版本是4.6.0或更高,那么无需做任何操作,只需使用我回答中的代码即可。Selenium会自动下载和处理浏览器驱动程序二进制文件。 - Shawn
2
不需要。如果你的selenium版本是4.6.0或更高,那么无需做任何操作,只需使用我回答中的代码即可。Selenium会自动下载和处理浏览器驱动程序二进制文件。 - Shawn
显示剩余4条评论

6
试试这个: service = Service(ChromeDriverManager(version="114.0.5735.90").install())

这是我找到的唯一有效的解决方案。但是手动设置版本并不理想。有没有更好的解决方案? - paul
这是我唯一有效的解决方案。但是手动设置版本并不理想。有更好的解决方案吗? - paul
这是我唯一有效的解决方案。但是手动设置版本并不理想。有更好的解决方案吗? - undefined
请看这个链接:https://dev59.com/SGwTookBPGXWitrZshXJ#76830878,Paul。 - iDevFS

6
我已经更新了webdriver-manager,之后没有遇到任何问题。
pip install --upgrade webdriver-manager

哇!这是一颗漂亮的宝石,解决了我在116版本中遇到的问题!非常感谢你,伙计! - Bryan_C

2

在稳定的 webdriver 版本 115 发布之前,解决方案是使用测试 webdriver 并相应地测试 Chrome。 步骤如下:

  • 从系统中卸载当前安装的 webdriver 和 Chrome;
  • 在此处找到 webdriver 和 Chrome 的稳定版本https://googlechromelabs.github.io/chrome-for-testing/
  • 搜索二进制 chrome 和 chromedriver(webdriver 和 Chrome 的版本应该相同!);
  • 安装 Chrome(实际上只需解压并将其放入某个文件夹中,例如:c:\chrome-test-ver);
  • 将文件夹 c:\chrome-test-ver 设置为 PATH 环境变量);
  • 安装 webdriver.exe(只需解压缩并复制到 Python 文件夹中,例如:C:\Users\Administrator\AppData\Local\Programs\Python\Python311);
  • 使用 selenium 运行您的 python 脚本,它应该可以工作。

2
对于那些在2023年7月26日之后使用selenium 4.8.0进行测试应用程序时遇到问题的人来说,这是一个解决方案。实际上,在2023年7月26日,Chrome自动更新到了版本115.0.5790.110,但其Web驱动程序尚未上传到任何地方,包括最可靠的网站https://googlechromelabs.github.io/chrome-for-testing/#stablehttps://chromedriver.chromium.org/downloads,无法获取Web驱动程序。
好消息是,我找到了解决方案,我的代码完美运行,我的测试工具也像以前一样正常工作。以下是给你的代码。在运行这些代码之前,请按照以下步骤操作:
步骤-01. pip uninstall selenium 步骤-02. pip install selenium==4.10.0 步骤-03. pip show selenium(确保已安装selenium版本4.10.0)。 步骤-04. pip install webdriver_manager ##Python/selenium 4.10.0中的代码
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), 
options=options)

url = 'https://www.google.com/'
driver.get(url)
driver.maximize_window()
sleep(10)

如果有人想要停止Chrome的自动更新,请随时向我提问,我也可以给你同样的解决方案。

2
为了避免手动更新到最新版本,您可以尝试以下方法:
import urllib.request
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

try:
    service = Service(ChromeDriverManager().install())
except ValueError:
    latest_chromedriver_version_url = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE"
    latest_chromedriver_version = urllib.request.urlopen(latest_chromedriver_version_url).read().decode('utf-8')
    service = Service(ChromeDriverManager(version=latest_chromedriver_version).install())

options = Options()
options.add_argument('--headless') #optional.
driver = webdriver.Chrome(service=service, options=options)
driver.get(url)

1

1

这个bug与webdriver-manager的版本有关。

请使用以下命令更新webdriver-manager到最新版本:

pip install --upgrade webdriver-manager

它在版本3.8.6中修复了(2023年4月13日)

修复了Chrome/Edge的版本下载逻辑:

  • 如果version="latest" - 下载Chrome/Chromium的最新发布版本和Edge的最新稳定版本;
  • 如果version=x.x.x - 下载x.x.x版本;
  • 如果version为None - 尝试确定已安装的浏览器版本,如果失败 - 像"latest"一样下载最新发布版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接