当前位置: 首页 > 知识库问答 >
问题:

Selenium python库通过docker,Chrome错误无法启动:异常退出

马臻
2023-03-14

我试图运行一些Python脚本与selenium库从一个基于miniconda/anaconda的docker容器,但我一直得到这个错误:selenium.common.exceptions.WebDriverException:消息:未知错误:Chrome启动失败:异常退出。我还使用Python包装器为xvfb,以避免打开一个真正的Chrome窗口。

要(从正在运行的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 build是如何工作的,我猜docker映像是以根目录构建的,其中的所有代码都是以根目录执行的,因此控制Chrome的不同用户应该不会有任何问题。

这段python代码在带有X windows的普通Ubuntu笔记本电脑上运行良好。在运行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 

共有1个答案

谭飞掣
2023-03-14

这些选项有助于解决问题。

chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument("--disable-setuid-sandbox")

当看到Chrome启动失败:崩溃时,需要一个。

另外:使用ps aux | grep chrome driver查找要杀死的PID,确保chrome驱动程序进程没有僵尸(来自以前的执行)。

请记住,如果您使用Python多处理库生成许多涉及Chrome浏览器实例的进程,那么您就不能使用Docker(Docker应该只启动一个Python进程,除非使用类似supervisor的东西),因此您可能会看到:selenium。常见的例外情况。WebDriverException:消息:chrome无法访问,如果您仍在尝试。

 类似资料: