No se puede abrir el navegador con Selenium después de la actualización de Firefox

Uso Selenium WebDriver en Ubuntu Desktop 16.04, y no puedo abrir el navegador. Recibo el siguiente error después de la actualización de Firefox (antes de esto, todo funcionó):

Traceback (most recent call last): File "test.py", line 6, in  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. 

A partir de Firefox versión 47.0 (que salió hace un tiempo), se debe usar un nuevo controlador (creado por mozilla en lugar de selenium) para conectarse a Firefox, debido a un error introducido en esta versión. A partir de la versión 48.0 de Firefox, el antiguo controlador quedará obsoleto por completo y solo se puede usar Marionette, por lo que es mejor cambiar ahora. Ver: Marionette Webdriver para Firefox

Descargue el controlador (en OSX solo use brew install geckodriver ), cambie el nombre del archivo ejecutable a wires.exe en windows, o wires en sistemas * nix, y asegúrese de que el ejecutable esté presente en la ruta del sistema, luego use este controlador en su progtwig del controlador anterior usando lo siguiente:

Al usar un controlador de página local:

Pitón:

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

Rubí:

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

DO#:

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

Cuando se usa rejilla de selenium:

Al usar una rejilla de selenium, el controlador debe estar presente en la ruta para todas las máquinas en su grilla.

Pitón:

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

Rubí:

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

DO#:

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

CORREGIDO : ¡La solución en este momento es degradar Firefox! ejecuta este comando para obtener una lista de las versiones de Firefox disponibles.

 apt-cache show firefox | grep Version 

Mi resultado:

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

Instalar:

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

Para mantener esta versión y no permitir actualizaciones:

 sudo apt-mark hold firefox 

Si desea mantener la versión de Firefox y permitir actualizaciones:

 sudo apt-mark unhold firefox sudo apt-get upgrade 

Solución : actualice Firefox a 47.0.1 y Selenium a 2.53.1.

Esta combinación funcionó para mí.

Para más detalles, consulte https://stackoverflow.com/a/37728659/6469532

Algunas personas tienen el problema de que algunos button o cuadros de select no se pueden seleccionar en el modo de marionette .

Una alternativa es usar una versión anterior de Firefox:

Puede descargar el binario aquí y usarlo aquí:

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

SOLUCIÓN bajar a la versión 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) Descargue geckodriver 0.6.2, descomprima, cambie el nombre a “cables” y no “wires.exe” https://github.com/mozilla/geckodriver/releases

2) Agregue la ubicación ejecutable de los cables a PATH (puse esto en mi carpeta python C: Program Files \ Python …) Seleccione Start, seleccione Control Panel. haga doble clic en Sistema y seleccione la pestaña Avanzado. Haga clic en Variables de entorno. … En la ventana Editar Variable del Sistema (o Nueva Variable del Sistema), especifique el valor de la variable de entorno PATH. … (Use ‘;’ para separar rutas, es decir [C: Users \ Reuben; C: Program Files \ Python]

3) Downgrade to Firefox 45 https://ftp.mozilla.org/pub/firefox/releases/45.0.2/win64/en-US/

No es necesario degradar Firefox. He tenido problemas con la versión de Windows y Firefox 49. Estaba usando la versión geckodrvier de 64 bits. Lo cambié a la versión geckodrvier de 32 bits y resolvió el problema. Ahora el navegador se abre correctamente sin ningún problema.