python - WebDriverException:消息:未知错误:Chrome 无法启动:通过 VPS 上的 Python 使用 ChromeDriver Chrome 和 Selenium 异常退出
问题描述
所以我有与这些帖子完全相同的错误
Selenium 'Chrome 无法启动:异常退出' 错误
我尝试了他们推荐的方法,但没有奏效。
这是我的代码
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(800, 600))
display.start()
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('--disable-extensions')
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=options)
driver.get('http://nytimes.com')
print(driver.title)
driver.close()
这是完整的错误信息
Traceback (most recent call last):
File "seleniumtest.py", line 13, in <module>
driver = webdriver.Chrome(chrome_options=options)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__
desired_capabilities=desired_capabilities)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, 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.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.15.0-42-generic x86_64)
我到底做错了什么?我在 digitalocean 上的 ubuntu VPS 上运行它。
解决方案
此错误消息...
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally
(Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.15.0-42-generic x86_64)
...意味着ChromeDriver无法启动/生成新的WebBrowser ,即Chrome 浏览器会话。
如下所述,恰好存在两个不兼容问题。
禁用 GPU
当Google 团队首次将Headless Chrome发布为GA(通用可用性)时,该文章提到:Getting Started with Headless Chrome
--disable-gpu \ # Temporarily needed if running on Windows.
添加了一条注释:
现在,
--disable-gpu
如果您在 Windows 上运行,您还需要包含该标志。
根据讨论Headless: make --disable-gpu flag不需要很明显:
Linux或Mac OSX
--disable-gpu
上不再需要该标志。一旦SwiftShader 在无头模式下在 Windows 上的断言失败的错误被修复,它在 Windows 上也将变得不必要。现在,由于此问题已标记为已修复,因此该参数现在应该是多余的。--disable-gpu
注意:您可以在 ERROR:gpu_process_transport_factory.cc(1007)-Lost UI shared context 中找到详细讨论:在 Headless 模式下通过 ChromeDriver 初始化 Chrome 浏览器时
但是,您的主要问题是您使用的二进制文件版本之间的不兼容,如下所示:
- 您正在使用chromedriver=2.30
- chromedriver=2.30的发行说明清楚地提到了以下内容:
支持Chrome v58-60
- 我们不知道您的chrome版本。假设您使用的是最新的Chrome版本之一:
Chrome version 71
Chrome version 72
Chrome version 73
因此ChromeDriver v2.30和Chrome 浏览器 v71-73之间存在明显的不匹配
解决方案
- 根据您的Chrome 浏览器版本,请按照以下指南相应地升级ChromeDriver:
- 如果您使用的是Chrome 版本 73,则需要下载ChromeDriver 73.0.3683.20
- 如果您使用的是Chrome 版本 72,则需要下载ChromeDriver 2.46或 ChromeDriver 72.0.3626.69
- 如果您使用的是Chrome 版本 71,则需要下载ChromeDriver 2.46或 ChromeDriver 71.0.3578.137
- 对于旧版本的Chrome,请参阅此讨论以了解支持它的ChromeDriver版本。
参考
您可以在以下位置找到一些相关的讨论:
推荐阅读
- bash - curl:(52)来自服务器的空回复 - 带有详细场景
- reactjs - 为什么状态不更新
- c - 尝试将返回值分配给 char 指针时的 tolower() 段错误
- python - 这个求解器需要数据中至少 2 个类的样本,但数据只包含一个类:1
- real-time - 遗传编程、在线学习、gplearn
- list - 在haskell中将列表转换为带有折叠的列表列表
- r - 带有 tryCatch 的函数内的自定义错误消息
- javascript - 如何从 jQuery AutoComplete 中的选定值中获取额外的 DB 值?
- python-3.x - 无法从“子进程”导入名称“Popen”
- python - ValueError:字段“id”需要一个数字,但得到“Die erste Meldung”。通过控制台添加项目后