如何修复seleniumWebDriverException:浏览器似乎退出之前,我们可以连接?

我在我的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和有人build议删除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' 

对于Google员工来说,这个答案对我来说不起作用,我不得不用这个答案来代替。 我正在使用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的第一个答案

我在安装了Jenkins和xvfb的(无头)Ubuntu 14.04服务器上运行。 我已经安装了最新的稳定的Firefox(47),开始构build失败,运行了一个python脚本,它使用selenium驱动(2.53版)的Firefox驱动。

显然Firefox 47+与Selenium 2.53中使用的驱动程序不兼容,而Selenium 3+将使用名为“Marionette”或“Gecko Driver”(尚未正式发布)的新驱动程序。

本页面以多种语言介绍如何使用新驱动程序: https : //developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver

基本上:

  1. 从github上的项目获取/构build可执行文件: https : //github.com/mozilla/geckodriver/releases (并确保它的权限设置为可执行的,IE chmod a+x /path/to/geckdriver-executable
  2. 重命名/复制二进制到“线”
  3. 确保二进制文件的位置被添加到构build在执行seleniumtesting时使用的PATH中
  4. 更新seleniumtesting使用新的驱动程序

对于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) 

我也面临同样的问题。 我在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 

检查你的DISPLAY环境variables。 在命令行中运行echo $DISPLAY

如果没有打印任何内容,那么您正在运行FireFox而没有分配任何显示。 你应该分配一个! 在运行python脚本之前,在命令行中运行export DISPLAY=:1

检查这个线程的更多信息: http : //hashcat.net/forum/thread-1973.html

我认为这里最简单的解决scheme就是用xvfb-run运行Python:

 sudo apt-get install xvfb xvfb-run python <your_file_or_args> 

将您的Firefox回滚到以前的工作版本。 我build议回2个版本。 禁用Firefox维护服务。

我正在研究解决scheme,Firefox维护服务将Firefox更新到了后台的最新版本。 这打破了我的代码,它给了我这个错误。

现在它是固定的!

谢谢大家!

这个错误是由于你的Xvfb没有运行。 所以重新启动你的xvfb:

 Xvfb :99 -ac 

然后检查。 这对我有用。

而不是降级火狐从47版本到45或者什么,我会build议升级到47.0.1或以上,因为他们似乎解决了一个问题。

但是如果你的操作系统在回购时没有新的软件包(比如Ubuntu 14.04这个答案),你可以使用ubuntuzilla项目中的debs:

 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后缀。 那为我解决了问题

我通过运行一个recursion的chown来解决这个问题,不仅是使用selenium的python脚本,而且是针对脚本运行的整个virtualenv。我将所有权更改为运行该文件的用户。 之后,这个错误消失了。

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

  1. 升级selenium包

     sudo pip install -U selenium 
  2. 而不是回滚到旧版本(如build议),我卷起到更新的版本(48.0,我以前使用V47.0)。 (升级按照Toby Speight给出的说明进行升级,而不是select较旧的版本select较新的版本)

更新你的selenuim版本—> pip install -U selenium

这可以通过更改输出文件(或相关文件到程序)的文件权限来解决。
我使用Firefox的webdriver。

尝试:

 chmod -R 777 output_file 

这解决了我同样的麻烦。