J'ai installé firefox et Xvfb sur mon serveur centos6.4 pour utiliser Selenium WebDriver.
Mais, quand j'ai exécuté le code, j'ai eu une erreur.
from Selenium import webdriver
browser = webdriver.Firefox()
Erreur
Selenium.common.exceptions.WebDriverException: Message:
'The browser appears to have exited before we could connect. The output was: None'
J'ai lu des pages liées sur stackoverflow et quelqu'un a suggéré de supprimer tous les fichiers du dossier tmp, je l'ai donc fait. Mais ça ne marche toujours pas.
Quelqu'un pourrait-il me donner une aide s'il vous plaît?
Merci d'avance!
Modifier
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/site-packages/Selenium/webdriver/firefox/webdriver.py", line 59, in __init__
self.binary, timeout),
File "/usr/local/lib/python3.4/site-packages/Selenium/webdriver/firefox/extension_connection.py", line 47, in __init__
self.binary.launch_browser(self.profile)
File "/usr/local/lib/python3.4/site-packages/Selenium/webdriver/firefox/firefox_binary.py", line 64, in launch_browser
self._wait_until_connectable()
File "/usr/local/lib/python3.4/site-packages/Selenium/webdriver/firefox/firefox_binary.py", line 103, in _wait_until_connectable
self._get_firefox_output())
Selenium.common.exceptions.WebDriverException: Message: 'The browser appears to have exited before we could connect. The output was: None'
pour les Googlers, cette réponse ne fonctionnait pas pour moi et je devais utiliser cette réponse à la place. J'utilise AWS Ubuntu.
En gros, je devais installer Xvfb, puis pyvirtualdisplay:
Sudo apt-get install xvfb
Sudo pip install pyvirtualdisplay
Une fois que j'ai fait cela, ce code python a fonctionné:
#!/usr/bin/env python
from pyvirtualdisplay import Display
from Selenium import webdriver
display = Display(visible=0, size=(1024, 768))
display.start()
browser = webdriver.Firefox()
browser.get('http://www.ubuntu.com/')
print browser.page_source
browser.close()
display.stop()
Merci à @ That1Guy pour la première réponse
Je courais dans sur un serveur (sans tête) Ubuntu 14.04 avec Jenkins et xvfb installés. J'avais installé la dernière version stable de Firefox (47), qui a démarré une version qui échouait et qui exécutait un script python utilisant le pilote Firefox pour Selenium (version 2.53).
Apparemment, Firefox 47+ n'est pas compatible avec le pilote utilisé dans Selenium 2.53, et Selenium 3+ utilisera un nouveau pilote appelé "Marionette" ou "Gecko Driver" (qui n'est pas encore officiellement publié).
Cette page explique comment utiliser assez bien le nouveau pilote, en plusieurs langues: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver
Fondamentalement:
chmod a+x /path/to/geckdriver-executable
)Pour Python, l’étape 4 ressemblait à ce qui suit:
from Selenium import webdriver
from Selenium.webdriver.common.desired_capabilities import DesiredCapabilities
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
driver = webdriver.Firefox(capabilities=firefox_capabilities)
Moi aussi j'avais rencontré le même problème. J'étais sur Firefox 47 et Selenium 2.53; J'ai rétrogradé Firefox à 45. Cela a fonctionné.
Commencez par supprimer Firefox 47:
Sudo apt-get purge firefox
Vérifier les versions disponibles:
apt-cache show firefox | grep Version
Il montrera les versions disponibles de Firefox comme:
Version: 47.0 + build3-0ubuntu0.16.04.1
Version: 45.0.2 + build1-0ubuntu1
Installer une version spécifique
Sudo apt-get install firefox=45.0.2+build1-0ubuntu1
Ensuite, vous ne devez plus effectuer de mise à niveau vers la nouvelle version.
Sudo apt-mark hold firefox
Si vous voulez mettre à jour plus tard
Sudo apt-mark unhold firefox
Sudo apt-get upgrade
Vérifiez votre variable d'environnement DISPLAY
. Exécutez echo $DISPLAY
en ligne de commande.
Si rien n'est imprimé, vous exécutez FireFox sans aucun AFFICHAGE attribué. Vous devriez en assigner un! Exécutez export DISPLAY=:1
dans la ligne de commande avant d’exécuter votre script python.
Consultez ce fil pour plus d’informations: http://hashcat.net/forum/thread-1973.html
Je pense que la solution la plus simple est de lancer Python avec xvfb-run
:
Sudo apt-get install xvfb
xvfb-run python <your_file_or_args>
Au lieu de rétrograder firefox de la version 47 à la version 45 ou quelque chose que je suggérerais de mettre à niveau à 47.0.1
ou supérieur, car ils semblent résoudre un problème.
Mais si votre système d'exploitation n'a pas de nouveaux paquets dans le référentiel (par exemple, Ubuntu 14.04 à l'heure de cette réponse), vous pouvez utiliser les debs du projet Ubuntuzilla:
wget sourceforge.net/projects/ubuntuzilla/files/mozilla/apt/pool/main/f/firefox-mozilla-build/firefox-mozilla-build_47.0.1-0ubuntu1_AMD64.deb
Sudo dpkg -i firefox-mozilla-build_47.0.1-0ubuntu1_AMD64.deb
Pour x86, utilisez _i386.deb
postfix . Ce problème s’est vendu à moi
Restaurez Firefox dans la version de travail précédente. Je suggère 2 versions en arrière. Désactiver le service de maintenance de Firefox.
Je travaillais sur une solution et le service de maintenance de Firefox a mis à jour Firefox avec la dernière version en arrière-plan. Cela a cassé mon code et il me donnait cette erreur.
Maintenant c'est réparé!
Merci tout le monde!
Cette erreur est due à votre Xvfb n'est pas en cours d'exécution. Alors redémarrez votre xvfb:
Xvfb :99 -ac
puis vérifiez . Cela fonctionne pour moi.
J'ai résolu ce problème en exécutant un chown récursif non seulement contre le script python utilisant Selenium, mais également contre l'intégralité de virtualenv dans laquelle le script était exécuté. Après cela, cette erreur est partie.
J'ai également fait face au même problème, ce que j'ai fait était:
Mettre à jour le paquet Selenium
Sudo pip install -U Selenium
Au lieu de revenir à la version précédente (comme suggéré), je suis passé à la version plus récente (48.0, j’utilisais auparavant la version 47.0) . version)