Ubuntu:selenium.common.exceptions:未创建会话:此版本的ChromeDriver仅支持Chrome版本79

时间:2019-12-21 17:25:18

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

我有一个在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和Chrome浏览器似乎兼容。

运行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(无头),这是一个非常漫长的过程,如果可能的话,我想“设置并忘记它”。寻找远处以更好地理解此问题,因此我可以避免一次又一次的发生。

谢谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

此错误消息...

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

...表示 ChromeDriver 无法启动/产生新的浏览上下文,即 Chrome浏览器v79 会话。


您的主要问题是所使用的二进制版本之间的不兼容性

  

支持 Chrome v79

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

Chrome_binary_expected_location

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之后的 /usr/bin/google-chrome 二进制位置替换默认的Chrome二进制位置,即chromium-browser,如下所示:

    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客户端版本太旧,则将其卸载并安装最新版本的 Web客户端 GA。
  • 进行系统重启
  • 非root用户用户的身份执行@Test
  • 始终在driver.quit()方法内调用tearDown(){},以优雅地关闭和销毁 WebDriver Web Client 实例。