【问题标题】:How to fix Selenium WebDriverException: The browser appears to have exited before we could connect?如何修复 Selenium WebDriverException:浏览器似乎在我们连接之前已经退出?
【发布时间】:2014-11-22 03:07:41
【问题描述】:

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

【问题讨论】:

  • 您使用哪个 selenium 和 firefox 版本?谢谢。
  • 感谢您的评论! Mozilla Firefox 31.1.0。
  • 我已经通过 pip 命令安装了 selenium。它是“版本:2.43.0”
  • 一个选项:您可以输出pip freeze 并查看selenium 的内容。
  • 另外,如果你试试chrome呢? browser = webdriver.Chrome()?

标签: python selenium selenium-webdriver webdriver


【解决方案1】:

对于 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 的第一个回答

【讨论】:

    【解决方案2】:

    我在安装了 Jenkins 和 xvfb 的(无头)Ubuntu 14.04 服务器上遇到了这个问题。我安装了最新的稳定版 Firefox (47),它启动了一个构建失败,运行了一个使用 Firefox 驱动程序的 python 脚本(版本 2.53)。

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

    此页面以多种语言解释了如何很好地使用新驱动程序:https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver

    基本上:

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

    对于 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 更新之后你现在得到“WebDriverException:消息:浏览器似乎在我们可以连接之前已经退出。”,这可能是解释。
    • 这里有更多信息:github.com/SeleniumHQ/selenium/issues/…。现在切换到 Marionette 的替代方法是恢复到 FF 46,或者等待 Mozilla 发布修复此问题的 FF 47 补丁。
    • 在第 3 步,我将文件放在:/usr/local/bin/wires。谢谢!
    • 该错误现已在 FF 47.0.1 中修复
    • 更新:看来FF48又出问题了;原始 webdriver.Firefox 版本或包含木偶的版本都不起作用(第二个回馈“WebDriverException:服务线意外退出。状态代码为:1”)
    【解决方案3】:

    我也遇到过同样的问题。我使用的是 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
      

    【讨论】:

    • 感谢您提供此解决方法一百万。我被这个问题困扰了一段时间。
    • @sudhishkr 我知道挫败感......很高兴解决方案有所帮助。
    • @AmoghJoshi 这是 selenium 还是 Firefox 的问题?这是否被他们记录为错误?
    • @Shafaq 没错,它是 Selenium 的问题。它已被记录为错误。这是更改日志的链接:raw.githubusercontent.com/SeleniumHQ/selenium/master/py/CHANGES。您可以看到他们已尝试解决与 firefox 网络驱动程序的兼容性问题。
    • 谢谢老哥,对我很有用
    【解决方案4】:

    检查您的 DISPLAY 环境变量。在命令行中运行echo $DISPLAY

    如果没有打印任何内容,则说明您正在运行 FireFox,但未分配任何 DISPLAY。你应该分配一个!在运行 python 脚本之前,在命令行中运行 export DISPLAY=:1

    查看此线程以获取更多信息:http://hashcat.net/forum/thread-1973.html

    【讨论】:

    • 实用提示:如果您在 Headless 模式下运行 Ubuntu 14.04,您可能需要export DISPLAY=:99。这对我有用。
    • 使用 Jenkins Xvfb 插件遇到这个问题:它的默认配置设置为 DISPLAY=:0,这是无效的。您需要在作业配置 > 构建环境 > xvfb 高级中覆盖:“Xvfb 显示名称偏移量”。在您的构建脚本中使用echo $DISPLAY 轻松追踪。
    【解决方案5】:

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

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

    【讨论】:

    • 您能快速解释一下通过 xvfb-run 运行 python 的作用吗?手册页不是很有帮助
    • @YPCrumble xvfb 与内部运行的可执行文件无关。问题在于硒版本或与之一起使用的Firefox。解决此类问题的最佳方法是将 Firefox 的副本与您的脚本一起附加,而不是在您无法控制/不知道的环境中运行您的脚本。
    • @YPCrumble 根据您的问题,xvfb-run 与将任何内容通过管道传输到 xvfb 相同,但方式相反。
    【解决方案6】:

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

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

    现在解决了!

    谢谢大家!

    【讨论】:

      【解决方案7】:

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

      Xvfb :99 -ac
      

      然后检查。 这对我有用。

      【讨论】:

        【解决方案8】:

        我建议不要将 firefox 从 47 版本降级到 45 或其他版本,而是升级到 47.0.1 或更高版本,因为它们似乎可以解决问题。

        但是,如果您的操作系统在 repo 中没有新的软件包(例如本回答时的 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 后缀。 卖给我的问题

        【讨论】:

          【解决方案9】:

          我通过对使用 selenium 的 python 脚本以及运行该脚本的整个 virtualenv 运行递归 chown 来解决此问题。我将所有权更改为运行该文件的用户。之后,这个错误就消失了。

          【讨论】:

            【解决方案10】:

            我也遇到了同样的问题,我所做的是:

            1. 升级硒包

              sudo pip install -U selenium
              
            2. 我没有回滚到旧版本(如建议的那样),而是回滚到新版本(48.0,我以前使用的是 V47.0)。 (升级请按照 Toby Speight 给出的说明进行,但不要选择旧版本,而是选择新版本)

            【讨论】:

              【解决方案11】:

              我在 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")
              

              【讨论】:

                【解决方案12】:

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

                【讨论】:

                  【解决方案13】:

                  可以通过更改输出文件(或程序相关文件)的文件权限来解决。
                  我使用了 Firefox 的网络驱动程序。

                  试试:

                  chmod -R 777 output_file
                  

                  这解决了我遇到的同样的问题。

                  【讨论】:

                  • @ZodEnlX 哦谢谢你的评论!!这是旧帖子,实际上我已经放弃了。我一定要试试你的解决方案!!我应该更改哪个文件的权限?我的意思是,就您而言,您更改了哪个文件的权限?
                  猜你喜欢
                  • 2015-01-31
                  • 2021-11-14
                  • 2016-10-30
                  • 2013-09-20
                  • 2016-10-16
                  • 2019-02-18
                  • 1970-01-01
                  • 2011-12-07
                  • 1970-01-01
                  相关资源
                  最近更新 更多