Не удается открыть браузер с Selenium после обновления Firefox

Я использую Selenium WebDriver на Ubuntu Desktop 16.04, и я не могу открыть браузер. После обновления 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.

Ответ 1

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

Ответ 2

Начиная с версии Firefox версии 47.0 (которая вышла немного позже), новый драйвер должен быть использован (создан mozilla вместо selenium) для подключения к Firefox из-за ошибки, появившейся в этой версии. Начиная с версии Firefox версии 48.0 старый драйвер будет полностью устарел, и только Marionette можно будет использовать, поэтому лучше переключиться сейчас. Смотрите: Marionette Webdriver для Firefox

Загрузите driver (в OSX просто используйте brew install geckodriver), переименуйте исполняемый файл в wires.exe в окнах или wires on * nix и убедитесь, что исполняемый файл присутствует в вашем системном пути, а затем используйте этот драйвер в своей программе вместо старого драйвера, используя следующее:

При использовании локального веб-сервера:

Python:

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

driver = webdriver.Firefox(capabilities=firefox_capabilities)

Ruby:

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

С#:

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

При использовании селеновой сетки:

При использовании селеновой сетки драйвер должен присутствовать в пути для всех машин в вашей сетке.

Python:

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

Ruby:

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

С#:

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

Ответ 3

Решение. Обновите Firefox до 47.0.1 и Selenium до 2.53.1.

Эта комбинация работала для меня.

Подробнее см. fooobar.com/questions/56540/...

Ответ 4

У некоторых людей есть проблема, что некоторые button или select не могут быть выбраны в модуле marionette.

Альтернативой является использование более старой версии firefox:

Здесь вы можете скачать двоичный и использовать его здесь:

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

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

Ответ 5

РЕШЕНИЕ понижает до 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

Ответ 6

1) Загрузите geckodriver 0.6.2, распакуйте, переименуйте в "проводы" не "wire.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/

Ответ 7

Не нужно понижать Firefox. Я столкнулся с проблемой с версией Windows и Firefox 49. Я использовал 64-битную версию geckodrvier. Я изменил его на 32-битную версию geckodrvier и решил проблему. Теперь браузер открывается должным образом без каких-либо проблем.