it-roy-ru.com

Не удается открыть браузер с 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.
38
Alexa Iulian

ИСПРАВЛЕНО: Решением на данный момент является понижение версии 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
11
Alexa Iulian

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

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

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

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 grid:

При использовании сетки 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); 
60
Mobrockers

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

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

Для получения дополнительной информации обратитесь к https://stackoverflow.com/a/37728659/6469532

10
Mohit Tater

У некоторых людей возникает проблема, заключающаяся в том, что некоторые buttons или 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)
4
trantu

РЕШЕНИЕпонизить до 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
3
user1412586

1) Загрузите geckodriver 0.6.2, разархивируйте, переименуйте в «роводники », а не« провода.exe » https://github.com/mozilla/geckodriver/releases

2) Добавьте расположение исполняемого файла проводов в PATH (я поместил это в папку Python C: Program Files\Python ...) Выберите «Пуск», выберите «Панель управления». дважды щелкните System и выберите вкладку Advanced .... Щелкните Переменные среды. ... В окне Изменить системную переменную (или новую системную переменную) укажите значение переменной среды PATH. ... (используйте ';' для разделения путей, т.е. [C: Users\Reuben; C: Program Files\Python]

3) Вернитесь к Firefox 45 https://ftp.mozilla.org/pub/firefox/releases/45.0.2/win64/en-US/

1
Reuben

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

1
Sachin Nikam