Impossible d'ouvrir le navigateur avec Selenium après la mise à jour de Firefox
J'utilise Selenium WebDriver sur Ubuntu Desktop 16.04, et je ne peux pas ouvrir le navigateur. Je reçois l'erreur suivante après la mise à jour de Firefox (avant cela, tout a fonctionné):
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.
7 réponses
A partir de la version 47.0 de Firefox (qui est sorti un peu plus tôt), un nouveau pilote doit être utilisé (créé par mozilla au lieu de selenium) pour se connecter à Firefox, à cause d'un bug introduit dans cette version. À partir de la version 48.0 de Firefox, L'ancien pilote sera complètement obsolète et seule Marionette peut être utilisée, il est donc préférable de changer maintenant. Voir: Marionnette Webdriver pour Firefox
Téléchargez le pilote (dans OSX, utilisez simplement brew install geckodriver
), renommez l'exécutable en wires.exe
on windows, ou wires
sur les systèmes * nix, et assurez-vous que l'exécutable est présent dans votre chemin système, puis utilisez ce pilote dans votre programme au lieu de l'ancien pilote en utilisant ce qui suit:
lorsque vous utilisez un webdriver local:
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);
C#:
var driver = new FirefoxDriver(new FirefoxOptions());
lors de l'utilisation de la grille de sélénium:
Lorsque vous utilisez une grille de sélénium le pilote doit être présent dans le chemin pour toutes les machines de votre grille.
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);
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);
Fixe : Solution en ce moment est de rétrograder Firefox! exécutez cette commande pour obtenir une liste des versions de Firefox.
apt-cache show firefox | grep Version
Mon Résultat:
Version: 47.0+build3-0ubuntu0.16.04.1
Version: 45.0.2+build1-0ubuntu1
Installer:
sudo apt-get install firefox=45.0.2+build1-0ubuntu1
Pour conserver cette version et interdire les mises à jour:
sudo apt-mark hold firefox
Si vous voulez libérer la version de firefox et autoriser les mises à jour:
sudo apt-mark unhold firefox
sudo apt-get upgrade
Solution : Mise À Niveau de Firefox vers 47.0.1 et Selenium vers 2.53.1.
Cette combinaison a fonctionné pour moi.
Pour plus de détails, reportez-vous à https://stackoverflow.com/a/37728659/6469532
Certaines personnes ont le problème que certaines boîtes button
ou select
ne peuvent pas être sélectionnées dansmarionette
modus.
Une alternative utilise une ancienne version de firefox:
, Vous pouvez télécharger le binaire ici et l'utiliser ici:
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary('path/to/binary')
driver = webdriver.Firefox(firefox_binary=binary)
SOLUTION rétrograder à la version 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) Télécharger geckodriver 0.6.2, décompresser, renommer en" fils "pas" fils.EXE" https://github.com/mozilla/geckodriver/releases
2) Ajoutez l'emplacement exécutable des fils au chemin (je l'ai mis dans mon dossier python C: Program Files \ Python...) Sélectionnez Démarrer, sélectionnez Panneau de configuration. double-cliquez sur Système et sélectionnez L'onglet Avancé. Cliquez Sur Variables D'Environnement. ... Dans la fenêtre Modifier la Variable système (ou nouvelle Variable système), spécifiez la valeur de la variable D'environnement PATH. ... (Utiliser ';' pour séparer les chemins c'est à dire [C:Users\Reuben;C: Program Files \ Python]
3) Rétrograder vers Firefox 45 https://ftp.mozilla.org/pub/firefox/releases/45.0.2/win64/en-US/
Pas besoin de rétrograder Firefox. J'ai rencontré un problème avec Windows et Firefox 49 version. J'utilisais la version 64 bits de geckodrvier. Je l'ai changé en version 32 bits geckodrvier et il a résolu le problème. Maintenant, le navigateur ouvre correctement sans aucun problème.