我一直为此绞尽脑汁。我得到了错误:
系统驱动程序意外退出。状态代码:-11。
我使用的是一个Linux服务器,它是一个共享的托管web服务器。我把一切都建立在虚拟环境中。
Python、Selenium和Geckodriver驻留在Linux web服务器上的虚拟环境中。Firefox驻留在虚拟环境之外。
export PATH=$PATH:/path/to/geckodriver
到我的终端,让geckodriver在PATH
环境变量中使用。
下面是我的代码:
#!/home/DIRECTORY/DIRECTORY/DIRECTORY/venv/bin/python
# -*- coding: UTF-8 -*-
import cgitb
import cgi
from selenium import webdriver
from selenium.webdriver import FirefoxOptions
cgitb.enable()
print ("Content-Type: text/html; charset=utf-8\n\n")
path = r'/home/DIRECTORY/DIRECTORY/DIRECTORY/venv/bin/geckodriver'
binary = FirefoxBinary(r'/usr/lib64/firefox')
opts = FirefoxOptions()
opts.add_argument("--headless")
browser = webdriver.Firefox(firefox_options=opts, firefox_binary=binary, executable_path=path)
rowser.get("http://google.com/")
print ("Headless Firefox Initialized")
browser.quit()
以下是我的跟踪错误:
Traceback (most recent call last):
File "selen.py", line 20, in <module>
browser = webdriver.Firefox(firefox_options=opts, executable_path=path)
File "/home/DIRECTORY/DIRECTORY/DIRECTORY/venv/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py", line 164, in __init__
self.service.start()
File "/home/DIRECTORY/DIRECTORY/DIRECTORY/venv/lib/python3.6/site-packages/selenium/webdriver/common/service.py", line 98, in start
self.assert_process_still_running()
File "/home/DIRECTORY/DIRECTORY/DIRECTORY/venv/lib/python3.6/site-packages/selenium/webdriver/common/service.py", line 111, in assert_process_still_running
% (self.path, return_code)
selenium.common.exceptions.WebDriverException: Message: Service /home/DIRECTORY/DIRECTORY/DIRECTORY/venv/bin/geckodriver unexpectedly exited. Status code was: -11
为什么我要得到这个错误,以及如何修复它?
发布于 2019-01-04 09:33:49
这至少是对你问题的部分回答。
-11
意味着subprocess
经历了分段错误。在Determining if a python subprocess segmentation faults上阅读更多关于它的信息过去,某些版本的Selenium与Firefox和/或geckodriver的某些版本不能很好地协同工作,因此存在一些问题。找到您的版本,如果可能的话,将它们更新到最新的版本,并为您的版本查找现有的bug报告。
在我的Ubuntu18.04LTS仿生海狸系统上,以下版本可以很好地协同工作:
如果必须浏览到特定路径才能使这些命令正常工作,而且这些命令不能直接在终端或虚拟环境中工作,则可能需要在调用webdriver.Firefox
时设置以下关键字参数之一
firefox_binary
- FirefoxBinary的实例或火狐二进制文件的完整路径。如果未定义,将使用系统默认Firefox安装。executable_path
-完全路径覆盖用于Firefox47.0.1及更高版本的geckodriver二进制文件,默认情况下从系统路径中提取二进制文件。没有什么花哨的测试,而是只在无头模式下使用Firefox的一个最小的Selenium示例,例如minimal_selenium_test.py
import selenium.webdriver
options = selenium.webdriver.FirefoxOptions()
options.add_argument("--headless")
driver = selenium.webdriver.Firefox(firefox_options=options)
driver.get('https://www.python.org/')
print(driver.title)
driver.close()
这应该适用于本地膝上型计算机、虚拟服务器以及Docker容器内,并且应该打印:
$ python3 minimal_selenium_test.py
Welcome to Python.org
https://stackoverflow.com/questions/54014683
复制相似问题