Selenium python library via docker, Chrome 错误启动失败:异常退出
Selenium python library via docker, Chrome error failed to start: exited abnormally
我正在尝试从基于 miniconda/anaconda 的 docker 容器中使用 selenium
库 运行 一些 python 脚本,但我不断得到此错误:selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
。我还为 xvfb
使用 python 包装器以避免打开真正的 Chrome window.
重现此内容(从 运行ning docker 容器):
root@304ccd3bae83:/opt# python
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> from selenium import webdriver
>>> from xvfbwrapper import Xvfb
>>>
>>> with Xvfb(width=1366, height=768) as xvfb:
... my_driver = webdriver.Chrome('/opt/chromedriver/2.33/chromedriver')
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 69, in __init__
desired_capabilities=desired_capabilities)
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 151, in __init__
self.start_session(desired_capabilities, browser_profile)
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 240, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 308, in execute
self.error_handler.check_response(response)
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4),platform=Linux 4.4.0-116-generic x86_64)
据此:https://sites.google.com/a/chromium.org/chromedriver/help/chrome-doesn-t-start 似乎有人可能需要使用适用于所有用户的独立版本 Chrome,但我不确定 docker构建有效,我猜 docker 图像构建为 root
,并且其中的所有代码都作为 root
执行,因此不同用户控制 [=34] 应该没有任何问题=].
此 python 代码在装有 X windows 的普通 Ubuntu 笔记本电脑上运行良好。在 运行ning docker 容器中检查时,我需要仔细选择 Chrome 和 chromedriver 的版本:
root@304ccd3bae83:/opt# /opt/chromedriver/2.33/chromedriver --version
ChromeDriver 2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4)
root@304ccd3bae83:/opt# google-chrome-stable --version
Google Chrome 62.0.3202.75
这些选项有助于解决问题。
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--disable-setuid-sandbox")
看到Chrome failed to start: crashed
时需要其中一个。
另外:确保 chrome-driver
进程没有僵尸(来自以前的执行),使用 ps aux | grep chrome-driver
找到要杀死的 PID。
切记,如果您使用 Python multiprocessing
库来生成许多涉及它们自己的 Chrome 浏览器实例的进程,那么您不能使用 Docker(它应该只启动一个 Python 进程,除非使用像 supervisor
这样的东西),所以你可能会看到:selenium.common.exceptions.WebDriverException: Message: chrome not reachable
如果你尝试的话。
我正在尝试从基于 miniconda/anaconda 的 docker 容器中使用 selenium
库 运行 一些 python 脚本,但我不断得到此错误:selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
。我还为 xvfb
使用 python 包装器以避免打开真正的 Chrome window.
重现此内容(从 运行ning docker 容器):
root@304ccd3bae83:/opt# python
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19)
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> from selenium import webdriver
>>> from xvfbwrapper import Xvfb
>>>
>>> with Xvfb(width=1366, height=768) as xvfb:
... my_driver = webdriver.Chrome('/opt/chromedriver/2.33/chromedriver')
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 69, in __init__
desired_capabilities=desired_capabilities)
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 151, in __init__
self.start_session(desired_capabilities, browser_profile)
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 240, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 308, in execute
self.error_handler.check_response(response)
File "/opt/conda/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4),platform=Linux 4.4.0-116-generic x86_64)
据此:https://sites.google.com/a/chromium.org/chromedriver/help/chrome-doesn-t-start 似乎有人可能需要使用适用于所有用户的独立版本 Chrome,但我不确定 docker构建有效,我猜 docker 图像构建为 root
,并且其中的所有代码都作为 root
执行,因此不同用户控制 [=34] 应该没有任何问题=].
此 python 代码在装有 X windows 的普通 Ubuntu 笔记本电脑上运行良好。在 运行ning docker 容器中检查时,我需要仔细选择 Chrome 和 chromedriver 的版本:
root@304ccd3bae83:/opt# /opt/chromedriver/2.33/chromedriver --version
ChromeDriver 2.33.506092 (733a02544d189eeb751fe0d7ddca79a0ee28cce4)
root@304ccd3bae83:/opt# google-chrome-stable --version
Google Chrome 62.0.3202.75
这些选项有助于解决问题。
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--disable-setuid-sandbox")
看到Chrome failed to start: crashed
时需要其中一个。
另外:确保 chrome-driver
进程没有僵尸(来自以前的执行),使用 ps aux | grep chrome-driver
找到要杀死的 PID。
切记,如果您使用 Python multiprocessing
库来生成许多涉及它们自己的 Chrome 浏览器实例的进程,那么您不能使用 Docker(它应该只启动一个 Python 进程,除非使用像 supervisor
这样的东西),所以你可能会看到:selenium.common.exceptions.WebDriverException: Message: chrome not reachable
如果你尝试的话。