如何修复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
基本上:
- 从github上的项目获取/构build可执行文件: https : //github.com/mozilla/geckodriver/releases (并确保它的权限设置为可执行的,IE
chmod a+x /path/to/geckdriver-executable
) - 重命名/复制二进制到“线”
- 确保二进制文件的位置被添加到构build在执行seleniumtesting时使用的PATH中
- 更新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,这工作。
-
先删除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
检查你的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。我将所有权更改为运行该文件的用户。 之后,这个错误消失了。
我也面临同样的问题,我做的是:
-
升级selenium包
sudo pip install -U selenium
-
而不是回滚到旧版本(如build议),我卷起到更新的版本(48.0,我以前使用V47.0)。 (升级按照Toby Speight给出的说明进行升级,而不是select较旧的版本select较新的版本)
更新你的selenuim版本—> pip install -U selenium
这可以通过更改输出文件(或相关文件到程序)的文件权限来解决。
我使用Firefox的webdriver。
尝试:
chmod -R 777 output_file
这解决了我同样的麻烦。