如何修复Selenium WebDriverException:在我们连接之前,浏览器似乎已经退出了?

时间:2014-09-27 02:55:09

标签: python selenium selenium-webdriver webdriver

我已经在我的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' 

13 个答案:

答案 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

基本上:

  1. 从github上的项目中获取/构建可执行文件:https://github.com/mozilla/geckodriver/releases(并确保它的perms设置为可执行,IE chmod a+x /path/to/geckdriver-executable
  2. 将二进制文件重命名/复制到&#34;电线&#34;
  3. 确保将二进制文件的位置添加到构建在执行selenium测试时使用的PATH
  4. 更新selenium测试以使用新驱动程序
  5. 对于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.这很有用。

  1. 首先删除Firefox 47:

    sudo apt-get purge firefox
    
  2. 检查可用版本:

    apt-cache show firefox | grep Version
    

    它将显示可用的Firefox版本,如:

      

    版本:47.0 + build3-0ubuntu0.16.04.1
      版本:45.0.2 + build1-0ubuntu1

  3. 安装特定版本

    sudo apt-get install firefox=45.0.2+build1-0ubuntu1
    
  4. 接下来,您不必再次升级到新版本。

    sudo apt-mark hold firefox
    
  5. 如果您想稍后升级

    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)

我也面临同样的问题,我所做的是:

  1. 升级selenium包

    sudo pip install -U selenium
    
  2. 我没有回滚到旧版本(如建议的那样),而是升级到更新的版本(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

这解决了我同样的麻烦。