ChromeDriver会话未创建:此版本的ChromeDriver仅支持Chrome 74版本的错误,使用Selenium和ChromeDriver Chrome。

200

我正在尝试使用rsDriver函数运行RSelenium,但是当我运行rD < - rsDriver()时,我收到了一条消息,告诉我需要一个更新的Chrome版本:

> rD <- rsDriver()
checking Selenium Server versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking chromedriver versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking geckodriver versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
checking phantomjs versions:
BEGIN: PREDOWNLOAD
BEGIN: DOWNLOAD
BEGIN: POSTDOWNLOAD
[1] "Connecting to remote server"

Selenium message:session not created: This version of ChromeDriver only supports Chrome version 74
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.3 x86_64)

Could not open chrome browser.
Client error message:
     Summary: SessionNotCreatedException
     Detail: A new session could not be created.
     Further Details: run errorDetails method
Check server log for further details.

错误信息似乎表明我需要Chrome版本74.0.3729.6,但是当我查看Chrome的设置时,它告诉我我正在运行最新的稳定版本(73.0.3683.75)。经过进一步的搜索,74.0.3729.6是Chrome的预发行开发版:我需要安装它才能使用RSelenium吗?

我并不固执于使用Chrome,但我无法让rsDriver使用Firefox:当我指定browser = "firefox"时,rsDriver给我同样的错误消息,说ChromeDriver不支持我的Chrome版本。

我的会话信息为:

R version 3.5.2 (2018-12-20)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS Mojave 10.14.3

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] wdman_0.2.4     forcats_0.3.0   stringr_1.3.1   dplyr_0.7.8     purrr_0.2.5     readr_1.3.1     tidyr_0.8.2    
 [8] tibble_2.0.1    ggplot2_3.1.0   tidyverse_1.2.1 rvest_0.3.2     xml2_1.2.0      RSelenium_1.7.5

1
下载这个旧版本。运行良好!>>---> https://chromedriver.storage.googleapis.com/index.html?path=2.46/ - Nelson Carvalho
1
在我的情况下,如果错误提示只支持版本76,我就不能使用Chrome 76.xxx。如果我降级到75.xxx,它会提示只支持版本75。如果我尝试最新版本(目前是78),它可以工作。 - BingLi224
今天我发现最简单的方法就是检查你的Chrome版本,下载Web驱动程序并将其复制到C:/programfiles/python/..,然后将此路径用于你的脚本......对我来说真的很有效。 - Nirmal Patel
使用以下命令在Ubuntu/Linux上更新Chromedriver和Chrome到最新版本:https://dev59.com/31UL5IYBdhLWcg3wM1ry#61218681 - alchemy
我检查了我电脑上安装的 Google Chrome 浏览器版本,然后下载了适合我的浏览器版本的 ChromeDriver。您可以从 https://chromedriver.chromium.org/ 下载它。 - VARAT BOHARA
显示剩余4条评论
24个回答

88

如果您的操作系统为MacOS,升级chromedriver将解决问题:

brew upgrade --cask chromedriver

不错,这让我走上了正确的轨道,只是我一直在使用 chromedriver-beta,它需要更高版本的 Chrome。所以我做了这个:brew cask uninstall chromedriver-beta; brew cask install chromedriver - Anthony To
4
只有在您通过brew安装了chromedriver时才适用。我是通过直接下载安装的,所以首先运行 rm /usr/local/bin/chromedriver 然后再运行 brew cask install chromedriver 来获取最新版本。无论如何,升级chromedriver就是解决方案。 - lucas
2
这应该是被接受的答案,而不是建议降级Chrome的答案。 - Guillaume Petit
这解决了我的问题。 - negrotico19
1
截至2021年,如果您遇到错误Error: Unknown command: cask,则需要运行命令:brew reinstall chromedriver。请参见https://dev59.com/Ql0a5IYBdhLWcg3wYXq8获取更多信息。新的cask安装语法是:`brew install --cask chromedriver`。 - stwr667

74

这个错误信息...

Selenium message:session not created: This version of ChromeDriver only supports Chrome version 74
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Mac OS X 10.14.3 x86_64)

这意味着ChromeDriver需要与Chrome Browser版本相对应,该版本应为74


快速安装最新的ChromeDriver

要安装最新版本的ChromeDriver,您可以使用以下方法:

  • Homebrew的Mac用户brew tap homebrew/cask && brew cask install chromedriver
  • Debian基于Linux的发行版sudo apt-get install chromium-chromedriver
  • 已安装Chocolatey的Windows用户choco install chromedriver

分析

您的主要问题是使用二进制文件版本之间的不兼容性,如下所示:

支持Chrome v74

  • 您使用的是当前发布的chrome=73.0

因此,ChromeDriver v74.0.3729.6Chrome Browser v73.0之间存在明显不匹配。


解决方案

  • ChromeDriver降级到ChromeDriver v73.0.3683.68级别。
  • 保持Chrome版本为Chrome v73级别。(根据ChromeDriver v73.0.3683.68发布说明
  • 通过IDE 清理Project Workspace并仅使用所需的依赖项重新构建项目。
  • 如果基本的Web Client版本太旧,则卸载它并安装最新的GA和发布版本的Web Client
  • 执行您的@Test
  • 始终在tearDown(){}方法中调用driver.quit()以优雅地关闭和销毁WebDriverWeb Client实例。

参考

您可以在以下位置找到相关详细讨论:


我已将ChromeDriver降级至v73.0.3683.68,清理了项目工作区并仅使用所需的依赖项重新构建。现在当我运行rD <- rsDriver()时,它会给我一个不同的错误消息,以以下内容结束:[1] "Connecting to remote server"无法打开Chrome浏览器。客户端错误消息:httr调用中的未定义错误。httr输出:无法连接到本地主机端口4567:连接被拒绝请检查服务器日志以获取更多详细信息。警告消息:在rsDriver()中:无法确定服务器状态。 - Matthew Law
Web Client -> Chrome 浏览器, GA -> 通用可用性, @Test -> 一个注解,用于识别使用 JUnit / TestNG 进行的 _测试_(您可以简单地将其视为 _test_) - undetected Selenium
2
这只是关于如何解决使用 Selenium 时版本不匹配的通用答案。此答案并不涉及 RRSelenium。下面由 @CAD 提供的被接受的答案应该是正确的。 - conrad-mac
1
我将我的 chromedriver 升级以匹配我的 chrome 版本(Chrome 帮助 -> 关于 - 版本),问题就解决了。 - JsAndDotNet
只是为了同步,Mac的第一条命令可以替换为 brew tap homebrew/cask && brew install --cask chromedriver - Idhem
显示剩余3条评论

46
今天我遇到了与你相同的问题,并在Google上找到了这篇文章以及其他相关的文章。我认为我可能有一个更直接的解决方案,可以修改您的代码。前面的回答正确地指出了版本不匹配的问题。
我尝试了提出的解决方案,但都没有成功。我发现我的电脑上的版本是正确的,然而,这个版本不匹配的错误并非由实际安装在电脑上的版本引起,而是由RSelenium代码默认寻找“最新”版本的Chrome/ChromeDriver引起的。请参见?rsDriver()帮助页面来查看参数。
如果按照帮助文档中的说明运行代码binman::list_versions("chromedriver"),则可以确定与该函数兼容的版本。在我的情况下,我能够使用以下代码来建立连接。 driver <- rsDriver(browser=c("chrome"), chromever="73.0.3683.68", extraCapabilities = eCaps) 您应该能够使用chromever=参数来指定您的Chrome版本。但是,我不得不使用最接近的版本(我的Chrome版本是“73.0.3683.75”)。
希望这可以帮到您!

1
CAD的答案对我有用,但需要注意使用chrome://settings/help来查看和/或更新Chrome浏览器版本。在我的情况下,我点击了更新以升级到版本:73.0.3683.86(官方版本)(64位)。 - user439089
看来您的变量对我的情况更加合适。但是我不知道如何告诉protractor使用已定义的版本。就像这样chromever="73.0.3683.68"。在我的情况下,我使用的是比protractor要求的低版本的chromium-browser。这就是我的情况 https://stackoverflow.com/questions/55984924/ng-e2e-can-not-start-because-of-the-chromedriver-74-0-3729-6?noredirect=1#comment98622261_55984924 - Victor Shelepen
2
您好,先生,非常棒。我稍微修改了这段代码,以始终使用最新版本:available.versions<-binman::list_versions("chromedriver") latest.version = available.versions$win32[length(available.versions)]感谢您! - StatsStudent
在哪里运行代码 binman::list_versions("chromedriver")?这是在哪份文档中指定的? - Peter Kionga-Kamau
我使用:rsDriver(chromever = binman::list_versions("chromedriver")$win32[4]) - Christopher Carroll Smith

33

更新 Google Chrome 版本至 74 可以解决问题。

步骤: 1. 点击帮助 -> 关于 Google Chrome -> Chrome 会自动查找更新(将 Chrome 更新到最新版本)

进入图像描述


23

我不得不重新安装protractor才能拉取更新后的webdriver-manager模块。另外,根据@Mark的评论,package-lock.json可能会锁定依赖项。


npm uninstall protractor
npm install --save-dev protractor

然后,在重新安装后,请确保检查 node_modules/protractor/node_modules/webdriver-manager/config.json 中的 maxChromedriver 值,以验证它与所需的Chrome驱动程序版本相匹配。


15

更新

我已经向RSelenium提交了拉取请求,添加了我在原始答案中提出的ChromeDriver版本选择逻辑。 在合并之前(如果有的话),您可以使用以下命令进行安装:

remotes::install_github("ropensci/RSelenium#237")

然后,您可以使用新的chromever = "latest_compatible"选项调用rsDriver(),它应该始终选择正确的ChromeDriver版本:

RSelenium::rsDriver(browser = "chrome",
                    chromever = "latest_compatible")

原始回答

我使用RSelenium::rsDriver()的默认chromever = "latest"设置时遇到了相同类型的错误,导致尝试将chromedriver 75.0.3770.8与最新的google-chrome-stable 74.0.3729.157组合失败:

session not created: This version of ChromeDriver only supports Chrome version 75

鉴于这显然是一个经常发生且相当烦人的问题,我想出了以下解决方法,始终使用最新兼容的ChromeDriver版本

rD <- RSelenium::rsDriver(browser = "chrome",
                          chromever =
                                  system2(command = "google-chrome-stable",
                                          args = "--version",
                                          stdout = TRUE,
                                          stderr = TRUE) %>%
                                  stringr::str_extract(pattern = "(?<=Chrome )\\d+\\.\\d+\\.\\d+\\.") %>%
                                  magrittr::extract(!is.na(.)) %>%
                                  stringr::str_replace_all(pattern = "\\.",
                                                           replacement = "\\\\.") %>%
                                  paste0("^",  .) %>%
                                  stringr::str_subset(string =
                                                              binman::list_versions(appname = "chromedriver") %>%
                                                              dplyr::last()) %>%
                                  as.numeric_version() %>%
                                  max() %>%
                                  as.character())

上述代码仅在Linux下进行了测试,并使用了一些tidyverse包(请先安装它们或在base R中重写)。对于其他操作系统,您可能需要进行一些调整,特别是要将command = "google-chrome-stable"替换为启动Google Chrome的系统特定命令:
  • On macOS it should be enough to replace command = "google-chrome-stable" with command = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome".

  • On Windows a plattform-specific bug prevents us from calling the Google Chrome binary directly to get its version number. Instead do the following:

    rD <- RSelenium::rsDriver(browser = "chrome",
                              chromever =
                                system2(command = "wmic",
                                        args = 'datafile where name="C:\\\\Program Files (x86)\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe" get Version /value',
                                        stdout = TRUE,
                                        stderr = TRUE) %>%
                                stringr::str_extract(pattern = "(?<=Version=)\\d+\\.\\d+\\.\\d+\\.") %>%
                                magrittr::extract(!is.na(.)) %>%
                                stringr::str_replace_all(pattern = "\\.",
                                                         replacement = "\\\\.") %>%
                                paste0("^",  .) %>%
                                stringr::str_subset(string =
                                                            binman::list_versions(appname = "chromedriver") %>%
                                                            dplyr::last()) %>% 
                                as.numeric_version() %>%
                                max() %>%
                                as.character())
    

基本上,该代码只确保最新的ChromeDriver版本与系统稳定版Google Chrome浏览器的主次修补版本号匹配,并将其作为chromever参数传递。此过程应符合官方ChromeDriver版本控制方案。引用:

  • ChromeDriver使用与Chrome相同的版本号方案(...)
  • 每个ChromeDriver版本都支持与之匹配的Chrome主版本、次版本和构建版本号。例如,ChromeDriver 73.0.3683.20支持所有以73.0.3683开头的Chrome版本。

5
我们需要的英雄。谢谢!附注:为了方便未来读者,我加入了Windows代码。 - Tung
2
我已经成功地集成它了,因为你已经成功测试过了! - Salim B

9

今天我遇到了这个问题,升级webdrivermanger解决了它(我的先前版本为3.0.0):

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>3.3.0</version>
    <scope>test</scope>
</dependency>

1
我通过升级到3.3.0版本解决了相同的问题,谢谢。 - Rajesh Om
1
我之前使用的是1.x版本。更新到3.3.0版本后,问题也得到了解决。 - ArtOfWarfare
你必须使用最新版本,即<version>3.6.2</version>。 - Neyomal
我认为如果包含有关如何升级“webdrivermanager”的步骤,这个答案将会得到极大的改善。你所提供的只是一些缺乏解释的XML代码。你能否更新这个答案并提供更多细节?谢谢。 - StatsStudent

4

Travis CI替代方案

由于Francesco Borzi的解决方案对我无效,这里提供另一种解决方案。

将以下内容添加到您的travis.yml文件中:

addons:
  chrome: stable

before_script:
  - LATEST_CHROMEDRIVER_VERSION=`curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE"`
  - curl "https://chromedriver.storage.googleapis.com/${LATEST_CHROMEDRIVER_VERSION}/chromedriver_linux64.zip" -O
  - unzip chromedriver_linux64.zip -d ~/bin

感谢Github上tagliala的贡献和支持:

https://github.com/diowa/ruby2-rails5-bootstrap-heroku/commit/6ba95f33f922895090d3fabc140816db67b09672


3
我曾经在ChromeDriver v74.0.3729.6和Chrome浏览器v73.0之间出现了兼容性问题,最终我找到了一种方法来安装一个较早版本的ChromeDriver,
  1. 在Chrome浏览器中点击“关于谷歌浏览器”,复制版本号,但不包括最后一组数字。例如:72.0.3626。

  2. 将该版本号粘贴到以下url的末尾并访问它。会返回一个版本号,把它复制下来。 https://chromedriver.storage.googleapis.com/LATEST_RELEASE_

  3. 回到命令行,运行bundle exec chromedriver-update <复制的版本号>


我找到了解决方案,并教授 - 肯定已经有类似的答案了 :) - Aleks

3

Travis CI

我在Travis中遇到了同样的问题,并通过添加以下内容进行了解决:

addons:
  chrome: stable

添加到我的.travis.yml文件中。


如果这个方法对你不起作用,可以尝试这个链接: https://dev59.com/mVMI5IYBdhLWcg3w1vOi#57577404 - lucas

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