Não é possível abrir o navegador com o Selenium após a atualização do Firefox

Eu uso o Selenium WebDriver no Ubuntu Desktop 16.04, e não consigo abrir o navegador. Eu recebo o seguinte erro após a atualização do Firefox (antes disso, tudo funcionou):

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. 

Como do Firefox versão 47.0 (que saiu um pouco de tempo), um novo driver deve ser usado (criado pelo Mozilla em vez de selenium) para se conectar ao Firefox, por causa de um bug introduzido nesta versão. A partir do Firefox versão 48.0, o driver antigo será obsoleto completamente e somente Marionette poderá ser usada, por isso é melhor trocar agora. Veja: Marionette Webdriver for Firefox

Faça o download do driver (no OSX apenas use brew install geckodriver ), renomeie o executável para wires.exe no Windows ou wires.exe sistemas * nix e verifique se o executável está presente no caminho do sistema e use este driver no programa. do driver antigo usando o seguinte:

Ao usar um webdriver local:

Python:

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

Rubi:

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

Ao usar grade de selenium:

Ao usar uma grade de selenium, o driver deve estar presente no caminho de todas as máquinas da sua grade.

Python:

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

Rubi:

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

CORRIGIDO : A solução neste momento é fazer o downgrade do Firefox! execute este comando para obter uma lista das versões disponíveis do Firefox.

 apt-cache show firefox | grep Version 

O meu 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 manter esta versão e não permitir atualizações:

 sudo apt-mark hold firefox 

Se você deseja desabilitar a versão do firefox e permitir atualizações:

 sudo apt-mark unhold firefox sudo apt-get upgrade 

Solução : Atualize o Firefox para 47.0.1 e o Selenium para o 2.53.1.

Essa combinação funcionou para mim.

Para mais detalhes, consulte https://stackoverflow.com/a/37728659/6469532

Algumas pessoas têm o problema de que alguns button ou checkboxs de select não podem ser selecionados no modo marionette .

Uma alternativa é usar a versão mais antiga do firefox:

Você pode baixar o binário aqui e usá-lo aqui:

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

Downgrade da SOLUÇÃO para a versão 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) Faça o download do geckodriver 0.6.2, descompacte, renomeie para “wires” e não “wires.exe” https://github.com/mozilla/geckodriver/releases

2) Adicione o local executável dos fios ao PATH (coloquei isso na minha pasta python C: Arquivos de Programas \ Python …) Selecione Iniciar, selecione Painel de Controle. clique duas vezes em Sistema e selecione a guia Avançado. Clique em variables ​​de ambiente. … Na janela Edit System Variable (ou New System Variable), especifique o valor da variável de ambiente PATH. … (Use ‘;’ para separar caminhos, por exemplo, [C: Usuários \ Reuben; C: Arquivos de Programas \ Python]

3) Faça downgrade para o Firefox 45 https://ftp.mozilla.org/pub/firefox/releases/45.0.2/win64/pt-BR/

Não há necessidade de fazer o downgrade do Firefox. Eu enfrentei problema com o Windows e Firefox 49 versão. Eu estava usando geckodrvier versão de 64 bits. Eu mudei para geckodrvier versão de 32 bits e resolveu o problema. Agora o navegador está abrindo corretamente sem nenhum problema.