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

我在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. 

从Firefox版本47.0开始(一会儿就出来了),由于在这个版本中引入了一个bug,必须使用一个新的驱动程序(由mozilla而不是selenium创建)连接到Firefox。 从Firefox版本48.0开始,旧的驱动程序将被完全弃用,只有Marionette可以使用,所以最好现在切换。 请参阅: 用于Firefox的Marionette Webdriver

下载驱动程序 (在OSX中只需使用brew install geckodriver ),将可执行文件重命名为wires.exe上的wires.exe或* nix系统上的wires.exe ,并确保可执行文件存在于系统路径中,然后在程序中使用此驱动程序旧的驱动程序通过使用以下内容:

使用本地webdriver时:

蟒蛇:

 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(); 

Java的:

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

C#:

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

使用硒网格时:

当使用硒网格时,驱动程序应该出现在网格中所有机器的路径上。

蟒蛇:

 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 

Java的:

 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); 

FIXED :此时的解决方案是降级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 

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

这个组合为我工作。

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

有些人有问题,某些buttonselect框不能在组合中选择。

另一种方法是使用较老的Firefox版本:

你可以在这里下载二进制文件,并在这里使用它:

 from selenium import webdriver from selenium.webdriver.firefox.firefox_binary import FirefoxBinary binary = FirefoxBinary('path/to/binary') driver = webdriver.Firefox(firefox_binary=binary) 

解决方案降级到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 

1)下载geckodriver 0.6.2,解压,重命名为“wires”而不是“wires.exe” https://github.com/mozilla/geckodriver/releases

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

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

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