我已经在我的centos6.4服务器上安装了firefox和Xvfb来使用selenium webdriver。
但是,当我运行代码时,我收到了一个错误。
from selenium import webdriver
browser = webdriver.Firefox()
错误
selenium.common.exceptions.WebDriverException: Message:
'The browser appears to have exited before we could connect. The output was: None'
我在stackoverflow上读了一些相关页面,有人建议删除tmp文件夹中的所有文件,所以我做了。但是,它仍然不起作用。
有人可以帮我一个忙吗?
提前谢谢!
修改
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/site-packages/selenium/webdriver/firefox/webdriver.py", line 59, in __init__
self.binary, timeout),
File "/usr/local/lib/python3.4/site-packages/selenium/webdriver/firefox/extension_connection.py", line 47, in __init__
self.binary.launch_browser(self.profile)
File "/usr/local/lib/python3.4/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 64, in launch_browser
self._wait_until_connectable()
File "/usr/local/lib/python3.4/site-packages/selenium/webdriver/firefox/firefox_binary.py", line 103, in _wait_until_connectable
self._get_firefox_output())
selenium.common.exceptions.WebDriverException: Message: 'The browser appears to have exited before we could connect. The output was: None'
答案 0 :(得分:73)
对于Google员工,这个答案对我没用,我不得不使用this answer。我正在使用AWS Ubuntu。
基本上,我需要安装Xvfb然后pyvirtualdisplay:
sudo apt-get install xvfb
sudo pip install pyvirtualdisplay
一旦我这样做了,这个python代码就可以了:
#!/usr/bin/env python
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=0, size=(1024, 768))
display.start()
browser = webdriver.Firefox()
browser.get('http://www.ubuntu.com/')
print browser.page_source
browser.close()
display.stop()
感谢@ That1Guy的第一个答案
答案 1 :(得分:25)
我在安装了Jenkins和xvfb的(无头)Ubuntu 14.04服务器上遇到了这个问题。我安装了最新稳定的Firefox(47),它启动了一个构建失败,运行了一个使用Firefox驱动程序进行selenium(版本2.53)的python脚本。
显然Firefox 47+与Selenium 2.53中使用的驱动程序不兼容,而Selenium 3+将使用名为&#34; Marionette&#34;或者&#34; Gecko Driver&#34; (尚未正式发布)。
此页面以多种语言解释了如何使用新驱动程序:https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver
基本上:
chmod a+x /path/to/geckdriver-executable
)对于Python,步骤4对我来说类似于以下内容:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
driver = webdriver.Firefox(capabilities=firefox_capabilities)
答案 2 :(得分:22)
我也面临同样的问题。我使用的是Firefox 47和Selenium 2.53;我将Firefox的评级降为45.这很有用。
首先删除Firefox 47:
sudo apt-get purge firefox
检查可用版本:
apt-cache show firefox | grep Version
它将显示可用的Firefox版本,如:
版本:47.0 + build3-0ubuntu0.16.04.1
版本:45.0.2 + build1-0ubuntu1
安装特定版本
sudo apt-get install firefox=45.0.2+build1-0ubuntu1
接下来,您不必再次升级到新版本。
sudo apt-mark hold firefox
如果您想稍后升级
sudo apt-mark unhold firefox
sudo apt-get upgrade
答案 3 :(得分:11)
检查您的DISPLAY
环境变量。在命令行中运行echo $DISPLAY
。
如果没有打印任何内容,那么您运行的FireFox没有分配任何DISPLAY。你应该分配一个!在运行python脚本之前,在命令行中运行export DISPLAY=:1
。
查看此主题以获取更多信息:http://hashcat.net/forum/thread-1973.html
答案 4 :(得分:5)
我认为这里最简单的解决方案是使用xvfb-run
运行Python:
sudo apt-get install xvfb
xvfb-run python <your_file_or_args>
答案 5 :(得分:1)
将您的Firefox回滚到之前的工作版本。我建议回来两个版本。禁用Firefox维护服务。
我正在研究解决方案,Firefox维护服务将Firefox更新到后台的最新版本。这打破了我的代码,它给了我这个错误。
现在已经修好了!
谢谢大家!
答案 6 :(得分:1)
此错误是由于您的Xvfb未运行造成的。所以重启你的xvfb:
Xvfb :99 -ac
然后检查。 这对我有用。
答案 7 :(得分:1)
而不是将firefox从47版本降级到45版本,或者我建议将其升级到47.0.1
或更高版本,因为它们似乎解决了问题。
但是如果您的操作系统在repo中没有新的软件包(例如在回答这个问题时的Ubuntu 14.04),您可以使用来自ubuntuzilla项目的deb:
wget sourceforge.net/projects/ubuntuzilla/files/mozilla/apt/pool/main/f/firefox-mozilla-build/firefox-mozilla-build_47.0.1-0ubuntu1_amd64.deb
sudo dpkg -i firefox-mozilla-build_47.0.1-0ubuntu1_amd64.deb
对于x86,使用_i386.deb
后缀。
这给我带来了问题
答案 8 :(得分:0)
我通过运行递归chown来解决这个问题,不仅针对使用selenium的python脚本,而且针对运行脚本的整个virtualenv。我将所有权更改为运行该文件的用户。在那之后,这个错误就消失了。
答案 9 :(得分:0)
我也面临同样的问题,我所做的是:
升级selenium包
sudo pip install -U selenium
我没有回滚到旧版本(如建议的那样),而是升级到更新的版本(48.0,我之前使用的是V47.0)。 (升级按照Toby Speight的说明进行升级,而不是选择旧版本选择更新的版本)
答案 10 :(得分:0)
我在Windows 10 Build 18363上找到了该解决方案。我必须专门调出Firefoxbinary和geckdriver可执行文件路径。
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
caps = DesiredCapabilities.FIREFOX.copy()
caps['marionette'] = True
# Path to Firefox binary
binary = FirefoxBinary(r'C:\Program Files\Mozilla Firefox\firefox.exe')
# Browser (driver) binary assigned, capabilities, and executable path for the geckodriver
driver = webdriver.Firefox(firefox_binary=binary, capabilities=caps,
executable_path=r'C:\Users\<name>\python\python-projects\geckodriver-v0.28.0-win64\geckodriver.exe')
# get google.co.in
driver.get("https://google.com")
答案 11 :(得分:-1)
更新您的selenuim版本---&gt; pip install -U selenium
答案 12 :(得分:-5)
可以通过更改输出文件(或相关文件到程序)的文件权限来解决 我使用的是Firefox的webdriver。
尝试:
chmod -R 777 output_file
这解决了我同样的麻烦。