問題描述
我有一個在 AWS 上的 EC2 實例 (ubuntu) 上運行的 python 腳本.它使用硒.它運行了好幾個星期,然后突然之間,今天,它停止工作并出現以下錯誤:
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only support Chrome version 79
這是我在 ubuntu 上運行的 python 腳本:
#安裝依賴從硒導入網絡驅動程序從 selenium.webdriver.chrome.options 導入選項從 selenium.common.exceptions 導入 ElementNotVisibleException從 selenium.common.exceptions 導入 NoSuchElementException從 selenium.common.exceptions 導入 TimeoutException從 selenium.webdriver.common.by 導入從 selenium.webdriver.support.ui 導入 WebDriverWait從 selenium.webdriver.support 導入 expected_conditions 作為 EC#設置chromedriver選項=選項()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")驅動程序 = 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 基于 Ubuntu 構建,在 Ubuntu 18.04 上運行
運行 chromium-browser -v
我看到了:
(chromium-browser:2901): Gtk-WARNING **: 17:28:14.613: 無法打開顯示:
我希望回答的兩個問題:
怎么可能工作了幾個星期,突然之間,chromedriver 和 chrome 決定不合作了?是不是 chromedriver 或 chrome 都更新了,而另一個沒有更新?除了更新從 crontab 運行腳本的時間之外,我沒有更改任何內容.
為什么我的 chromedriver 和 chrome 瀏覽器版本相同時會出現這個錯誤?讓 chromedriver 在 ubuntu 上使用 chrome(無頭)是一個非常漫長的過程,如果可能的話,我想設置它并忘記它".尋找遠方以更好地理解這個問題,這樣我就可以避免它一次又一次地發生.
謝謝.
這個錯誤信息...
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only support Chrome version 79
...暗示 ChromeDriver v79 無法啟動/生成新的瀏覽上下文,即瀏覽器版本所在的 Chrome 瀏覽器 會話不是 v79.x.
<小時>您的主要問題是您使用的二進制文件版本之間的不兼容性,如下所示:
- 您提到了使用 chromedriver=79.0.3945.79.雖然 ChromeDriver v79.x 的發布版本是 )
或者您可以使用
chromium-browser
覆蓋默認的 Chrome 二進制位置,即/usr/bin/google-chrome
文檔后的二進制位置 在非標準位置使用 Chrome 可執行文件 如下:從 selenium 導入 webdriver從 selenium.webdriver.chrome.options 導入選項選項=選項()options.binary_location='/path/to/chromium-browser.exe'driver = webdriver.Chrome(executable_path=r'C:UtilityBrowserDriverschromedriver.exe', options=options)driver.get('http://google.com/')
您可以在 如何找到詳細討論使用 Selenium 運行 Chromium 瀏覽器?
- 清理你的項目工作區通過你的IDE和重建你的項目只需要依賴.
- 如果您的基本 Web 客戶端 版本太舊,請卸載它并安裝最新的 GA 和發布版本的 Web 客戶端.
- 進行一次系統重啟.
- 以 非 root 用戶身份執行您的
@Test
. - 總是在
tearDown(){}
方法中調用driver.quit()
來關閉 &優雅地銷毀 WebDriver 和 Web Client 實例.
參考
您可以在以下位置找到相關的詳細討論:
- 如何在 Chrome 瀏覽器通過 Python selenium 自動更新時使用特定版本的 ChromeDriver
I have a python script running on an EC2 instance (ubuntu) on AWS. It uses selenium. It was working perfectly for weeks, and then all of the sudden, today, it stopped working with the following error:
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 79
Here is my python script, which I'm running on ubuntu:
#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)
What is odd is that chromedriver and chromium-browser appear to be compatible.
Upon running chromedriver -v
I see the version is:
ChromeDriver 79.0.3945.79 (29f75ce3f42b007bd80361b0dfcfee3a13ff90b8-refs/branch-heads/3945@{#916})
And, running chromium-browser --version
I get:
Chromium 79.0.3945.79 Built on Ubuntu , running on Ubuntu 18.04
Upon running chromium-browser -v
I see :
(chromium-browser:2901): Gtk-WARNING **: 17:28:14.613: cannot open display:
Two questions I'm hoping to answer :
How could work for weeks, and then all of the sudden, chromedriver and chrome decide not to cooperate with each other? Could it be that either chromedriver or chrome was updated without the other being updated? I did not change anything, with the exception of updating the time from which the script was run from crontab.
Why is this error happening when my chromedriver and chrome browser are the exact same version? It was an extremely long process to get chromedriver to work with chrome (headless) on ubuntu and I'd like to "set it and forget it" if possible. Looking for away to better understand this problem so I can avoid it happening again and again.
Thanks.
This error message...
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 79
...implies that the ChromeDriver v79 was unable to initiate/spawn a new Browsing Context i.e. Chrome Browser session where the browser version was other then v79.x.
Your main issue is the incompatibility between the version of the binaries you are using as follows:
- You mentioned about using chromedriver=79.0.3945.79. Though the released versions of ChromeDriver v79.x are ChromeDriver 79.0.3945.16 (2019-10-30) and ChromeDriver 79.0.3945.36 (2019-11-18), however both the release notes of chromedriver=79.0.3945.79 clearly mentions the following :
Supports Chrome v79
- You are using chromium-browser v79.0.3945.79 browser.
- ChromeDriver supports
google-chrome
when installed at the default location with respect to the underlying os:
1For Linux systems, the ChromeDriver expects /usr/bin/google-chrome
to be a symlink to the actual Chrome binary.
Solution
There are two solutions:
- Either you upgrade
google-chrome
installed at the default location to current Chrome Version 79.0 level. (as per ChromeDriver v79.0 release notes) Or you can override the default Chrome binary location i.e.
/usr/bin/google-chrome
with thechromium-browser
binary location following the documentation Using a Chrome executable in a non-standard location as follows: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:UtilityBrowserDriverschromedriver.exe', options=options) driver.get('http://google.com/')
You can find a detailed discussion in How to run a Chromium Browser with Selenium?
- Clean your Project Workspace through your IDE and Rebuild your project with required dependencies only.
- If your base Web Client version is too old, then uninstall it and install a recent GA and released version of Web Client.
- Take a System Reboot.
- Execute your
@Test
as non-root user. - Always invoke
driver.quit()
withintearDown(){}
method to close & destroy the WebDriver and Web Client instances gracefully.
Reference
You can find a relevant detailed discussion in:
- How to work with a specific version of ChromeDriver while Chrome Browser gets updated automatically through Python selenium
這篇關于Ubuntu:selenium.common.exceptions:未創建會話:此版本的 ChromeDriver 僅支持 Chrome 版本 79的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!