【问题标题】:Ubuntu: selenium.common.exceptions: session not created: This version of ChromeDriver only supports Chrome version 79Ubuntu:selenium.common.exceptions:未创建会话:此版本的 ChromeDriver 仅支持 Chrome 版本 79
【发布时间】:2020-04-13 17:45:01
【问题描述】:

我有一个在 AWS 上的 EC2 实例 (ubuntu) 上运行的 python 脚本。它使用硒。它运行了好几个星期,然后突然之间,今天,它停止工作并出现以下错误:

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 79

这是我在 ubuntu 上运行的 python 脚本:

#install dependencies
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import ElementNotVisibleException
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import TimeoutException

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

#Set up chromedriver
options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--window-size=1420,1080')
options.add_argument('--headless')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-gpu')
options.add_argument("--disable-notifications")

driver = webdriver.Chrome(chrome_options=options)

奇怪的是 chromedriver 和 chromium-browser 似乎兼容。

在运行chromedriver -v 时,我看到的版本是:

ChromeDriver 79.0.3945.79 (29f75ce3f42b007bd80361b0dfcfee3a13ff90b8-refs/branch-heads/3945@{#916})

然后,运行 chromium-browser --version 我得到:

Chromium 79.0.3945.79 Built on Ubuntu , running on Ubuntu 18.04

在运行chromium-browser -v 时,我明白了:

(chromium-browser:2901): Gtk-WARNING **: 17:28:14.613: cannot open display: 

我希望回答的两个问题:

  1. 怎么可能工作了几个星期,然后突然之间,chromedriver 和 chrome 决定不合作了?是不是 chromedriver 或 chrome 都更新了,而另一个没有更新?除了更新从 crontab 运行脚本的时间之外,我没有更改任何内容。

  2. 当我的 chromedriver 和 chrome 浏览器版本完全相同时,为什么会出现此错误?让 chromedriver 在 ubuntu 上使用 chrome(无头)是一个非常漫长的过程,如果可能的话,我想“设置它并忘记它”。寻找远方以更好地理解这个问题,这样我就可以避免它一次又一次地发生。

谢谢。

【问题讨论】:

    标签: python selenium google-chrome ubuntu selenium-chromedriver


    【解决方案1】:

    默认情况下,webdriver.Chrome 运行 /usr/bin/google-chrome(如果可用),而不是 chromium-browser(请参阅 Default location of ChromeDriver binary and Chrome binary on windows 7)。检查google-chrome --version

    【讨论】:

    • 谢谢马特。 google-chrome --version 显示:Google Chrome 78.0.3904.70 我需要在 ubuntu 中更新它吗?
    • Debanjan,使用 options.binary_location='/path/to/chromium-browser.exe' 无效,但使用 options.binary_location='/path/to/chromium-browser' 有效。
    • @DiamondJoe12 是的,您需要更新 Chrome 或配置 ChromeDriver 以改用 Chromium。听起来后者对你有用。您能接受这个答案作为您问题的解决方案吗?
    • Matt - 我会赞成你的评论,但这里提供的其他答案实际上能够解决这个问题。感谢您的帮助!
    【解决方案2】:

    此错误消息...

    selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 79
    

    ...暗示 ChromeDriver v79 无法启动/生成新的浏览上下文,即浏览器版本所在的 Chrome 浏览器 会话不是 v79.x。


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

    支持 Chrome v79

    • 您正在使用 chromium-browser v79.0.3945.79 浏览器。
    • ChromeDriver 支持google-chrome 安装在相对于底层操作系统的默认位置:

    1对于 Linux 系统,ChromeDriver 期望 /usr/bin/google-chrome 成为实际 Chrome 二进制文件的符号链接。


    解决方案

    有两种解决方案:

    • 要么将安装在默认位置的 google-chrome 升级到当前的 Chrome 版本 79.0 级别。 (根据ChromeDriver v79.0 release notes
    • 或者您可以使用文档Using a Chrome executable in a non-standard location 之后的 chromium-browser 二进制位置覆盖默认的 Chrome 二进制位置,即 /usr/bin/google-chrome,如下所示:

      from selenium import webdriver
      from selenium.webdriver.chrome.options import Options
      
      options = Options()
      options.binary_location='/path/to/chromium-browser.exe'
      driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe', options=options)
      driver.get('http://google.com/')
      

    您可以在How to run a Chromium Browser with Selenium?找到详细讨论

    • 清理你的项目工作区通过你的IDE重建你的项目只需要依赖。
    • 如果您的基本 Web 客户端 版本太旧,请卸载它并安装最新的 GA 和发布版本的 Web 客户端
    • 进行系统重启
    • 非root用户身份执行@Test
    • 始终在 tearDown(){} 方法中调用 driver.quit() 以优雅地关闭和销毁 WebDriverWeb Client 实例。

    参考

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

    【讨论】:

    • 谢谢。我的 chromium-browser.exe 在哪里?我的 chromium-browser 在 /usr/bin 中,但是当我这样做时:options.binary_location='/usr/bin/chromium-browser.exe' 终端显示消息:未知错误:/usr/bin/chromium 中没有 chrome 二进制文件-browser.exe
    • @DiamondJoe12 您在 Linux Ubuntu 上,您需要剥离扩展名,即 .exe 部分
    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2020-04-09
    • 2020-09-16
    相关资源
    最近更新 更多