Не удается открыть браузер с 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 и решил проблему. Теперь браузер открывается должным образом без каких-либо проблем.