Firefox更新后无法使用Selenium打开浏览器

时间:2016-06-11 08:32:09

标签: selenium firefox browser webdriver

我在Ubuntu Desktop 16.04上使用Selenium WebDriver,但我无法打开浏览器。 Firefox更新后出现以下错误(在此之前,一切正常):

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    driver = webdriver.Firefox()
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/firefox/webdriver.py", line 81, in __init__
    self.binary, timeout)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 51, in __init__
    self.binary.launch_browser(self.profile, timeout=timeout)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 68, in launch_browser
    self._wait_until_connectable(timeout=timeout)
  File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 98, in _wait_until_connectable
    raise WebDriverException("The browser appears to have exited "
selenium.common.exceptions.WebDriverException: Message: The browser appears to have exited before we could connect. If you specified a log_file in the FirefoxBinary constructor, check it for details.

7 个答案:

答案 0 :(得分:60)

从Firefox 47.0版开始(稍微出版),必须使用新驱动程序(由mozilla而不是selenium创建)连接到Firefox,因为此版本中引入了一个错误。从Firefox 48.0开始,旧的驱动程序将被完全弃用,只能使用Marionette,所以现在切换更好。请参阅:Marionette Webdriver for Firefox

下载driver(在OSX中使用brew install geckodriver),将可执行文件重命名为Windows上的wires.exe或* nix系统上的wires,并确保可执行文件存在于您的系统路径中,然后使用以下命令在程序中使用此驱动程序而不是旧驱动程序:

使用本地webdriver时:

的Python:

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True

driver = webdriver.Firefox(capabilities=firefox_capabilities)

红宝石:

driver = Selenium::WebDriver.for :firefox, marionette: true

使用Javascript:

var capabilities = Capabilities.firefox();
capabilities.set('marionette', true);

var driver = new webdriver.Builder().withCapabilities(capabilities).build();

爪哇:

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
Webdriver driver = new FirefoxDriver(capabilities);

C#:

var driver = new FirefoxDriver(new FirefoxOptions());

使用selenium网格时:

使用硒网格时,驱动程序应出现在网格中所有计算机的路径中。

的Python:

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
driver = webdriver.Firefox(capabilities=firefox_capabilities)

红宝石:

caps = Selenium::WebDriver::Remote::Capabilities.firefox marionette: true
driver = Selenium::WebDriver.for :firefox, desired_capabilities: caps

爪哇:

DesiredCapabilities capabilities = DesiredCapabilities.firefox();
// Set Marionette on so the Grid will use this instead of normal FirefoxDriver
capabilities.setCapability("marionette", true);

WebDriver driver = new RemoteWebDriver(capabilities); 

C#:

DesiredCapabilities capabilities = DesiredCapabilities.Firefox();
// Set Marionette on so the Grid will use this instead of normal FirefoxDriver
capabilities.SetCapability("marionette", true);

var driver = new RemoteWebDriver(capabilities); 

答案 1 :(得分:11)

<强>固定: 此时的解决方案是降级Firefox! 运行此命令以获取可用的Firefox版本列表。

apt-cache show firefox | grep Version

我的结果:

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

安装:

sudo apt-get install firefox=45.0.2+build1-0ubuntu1

保留此版本并禁止更新:

sudo apt-mark hold firefox

如果您想要取消保留firefox版本并允许更新:

sudo apt-mark unhold firefox
sudo apt-get upgrade

答案 2 :(得分:10)

解决方案:将Firefox升级到47.0.1,将Selenium升级到2.53.1。

这种组合对我有用。

有关详细信息,请参阅https://stackoverflow.com/a/37728659/6469532

答案 3 :(得分:4)

有些人遇到的问题是,button模式无法选择select个或marionette个框。

另一种方法是使用较旧的firefox版本:

您可以下载二进制here并在此处使用它:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

binary = FirefoxBinary('path/to/binary')
driver = webdriver.Firefox(firefox_binary=binary)

答案 4 :(得分:3)

解决方案降级为45版:

firefox --version
    Mozilla Firefox 47.0
apt-get remove firefox
wget https://ftp.mozilla.org/pub/firefox/releases/45.0/linux-x86_64/en-US/firefox-45.0.tar.bz2
tar -xjf firefox-45.0.tar.bz2
mv firefox /opt/firefox45
ln -s /opt/firefox45/firefox /usr/bin/firefox
firefox --version
    Mozilla Firefox 45.0

答案 5 :(得分:1)

1)下载geckodriver 0.6.2,解压缩,重命名为&#34; wire&#34;不是&#34; wires.exe&#34; https://github.com/mozilla/geckodriver/releases

2)将连线可执行位置添加到PATH(我把它放在我的python文件夹C:Program Files \ Python ...中) 选择开始,选择控制面板。双击“系统”,然后选择“高级”选项卡。 单击“环境变量”。 ... 在“编辑系统变量”(或“新建系统变量”)窗口中,指定PATH环境变量的值。 ...(使用&#39;;&#39;分隔路径,即[C:Users \ Reuben; C:Program Files \ Python]

3)降级到Firefox 45 https://ftp.mozilla.org/pub/firefox/releases/45.0.2/win64/en-US/

答案 6 :(得分:1)

无需降级Firefox。我遇到过Windows和Firefox 49版本的问题。我使用geckodrvier 64位版本。我将它更改为geckodrvier 32位版本,它解决了这个问题。现在浏览器正常打开,没有任何问题。