Ich habe Firefox und Xvfb auf meinem centos6.4-Server installiert, um den Selenium-Web-Treiber zu verwenden.
Beim Ausführen des Codes wurde jedoch eine Fehlermeldung angezeigt.
from Selenium import webdriver
browser = webdriver.Firefox()
Error
Selenium.common.exceptions.WebDriverException: Message:
'The browser appears to have exited before we could connect. The output was: None'
Ich habe einige verwandte Seiten über stackoverflow gelesen und jemand schlug vor, alle Dateien im tmp-Ordner zu entfernen, also habe ich es getan. Aber es funktioniert immer noch nicht.
Könnte mir bitte jemand helfen?
Danke im Voraus!
Bearbeiten
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'
für Googlers funktionierte diese Antwort nicht für mich und ich musste stattdessen diese Antwort verwenden. Ich verwende AWS Ubuntu.
Grundsätzlich musste ich Xvfb installieren und dann pyvirtualdisplay:
Sudo apt-get install xvfb
Sudo pip install pyvirtualdisplay
Nachdem ich das getan hatte, funktionierte dieser Python-Code:
#!/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()
Danke an @ That1Guy für die erste Antwort
Ich lief auf einem Ubuntu 14.04 Server (mit Headless) und Jenkins und xvfb installiert. Ich hatte den neuesten stabilen Firefox (47) installiert, der einen Build-Fehler startete, in dem ein Python-Skript ausgeführt wurde, das den Firefox-Treiber für Selenium (Version 2.53) verwendete.
Anscheinend ist Firefox 47+ nicht mit dem Treiber kompatibel, der in Selenium 2.53 verwendet wird, und Selenium 3+ wird einen neuen Treiber namens "Marionette" oder "Gecko Driver" verwenden (der noch nicht offiziell veröffentlicht wurde).
Auf dieser Seite wird die Verwendung des neuen Treibers in mehreren Sprachen beschrieben: https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver
Grundsätzlich gilt:
chmod a+x /path/to/geckdriver-executable
).Für Python sah Schritt 4 für mich wie folgt aus:
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)
Ich hatte auch das gleiche Problem. Ich war bei Firefox 47 und Selen 2.53; Ich habe Firefox auf 45 herabgestuft. Das hat funktioniert.
Entfernen Sie zuerst Firefox 47:
Sudo apt-get purge firefox
Überprüfen Sie die verfügbaren Versionen:
apt-cache show firefox | grep Version
Es werden verfügbare Firefox-Versionen angezeigt:
Version: 47.0 + build3-0ubuntu0.16.04.1
Version: 45.0.2 + build1-0ubuntu1
Installieren Sie eine bestimmte Version
Sudo apt-get install firefox=45.0.2+build1-0ubuntu1
Als nächstes müssen Sie nicht erneut auf die neuere Version aktualisieren.
Sudo apt-mark hold firefox
Wenn Sie später ein Upgrade durchführen möchten
Sudo apt-mark unhold firefox
Sudo apt-get upgrade
Überprüfen Sie Ihre Umgebungsvariable DISPLAY
. Führen Sie echo $DISPLAY
in der Befehlszeile aus.
Wenn nichts gedruckt wird, führen Sie FireFox ohne zugewiesene ANZEIGE aus. Du solltest eins vergeben! Führen Sie export DISPLAY=:1
in der Befehlszeile aus, bevor Sie Ihr Python-Skript ausführen.
In diesem Thread finden Sie weitere Informationen: http://hashcat.net/forum/thread-1973.html
Ich denke, die einfachste Lösung hier ist, einfach Python mit xvfb-run
auszuführen:
Sudo apt-get install xvfb
xvfb-run python <your_file_or_args>
Anstatt Firefox von der 47-Version auf 45 oder ein anderes herunterzustufen, empfehle ich ein Upgrade auf 47.0.1
oder höher, da dies ein Problem zu beheben scheint.
Wenn Ihr Betriebssystem jedoch keine neuen Pakete in Repo enthält (zum Beispiel Ubuntu 14.04 zum Zeitpunkt dieser Antwort), können Sie Debs aus dem Ubuntuzilla-Projekt verwenden:
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
Für x86 verwenden Sie _i386.deb
postfix . Das verkaufte Problem für mich
Setzen Sie Ihren Firefox auf die vorherige Arbeitsversion zurück. Ich schlage 2 Versionen vor. Deaktivieren Sie den Firefox-Wartungsdienst.
Ich habe an einer Lösung gearbeitet und der Firefox Maintenance Service hat Firefox auf den neuesten Stand im Hintergrund aktualisiert. Dies hat meinen Code gebrochen und es gab mir diesen Fehler.
Jetzt ist es behoben!
Danke euch allen!
Dieser Fehler ist darauf zurückzuführen, dass Xvfb nicht ausgeführt wird. So starten Sie Ihre xvfb neu:
Xvfb :99 -ac
dann überprüfen Sie ... Das funktioniert bei mir.
Ich habe dies behoben, indem ich einen rekursiven Chown für nicht nur das Python-Skript mit Selenium durchführte, sondern auch für die gesamte virtuelle Umgebung, in der das Skript ausgeführt wurde. Danach ging dieser Fehler weg.
Ich stand auch vor dem gleichen Problem, was ich tat:
Aktualisieren Sie das Selenium-Paket
Sudo pip install -U Selenium
Anstatt auf eine ältere Version (wie vorgeschlagen) zurückzurollen, habe ich mich auf eine neuere Version (48.0, früher war ich mit V47.0 eingestellt) ... (für ein Upgrade folge den Anweisungen von Toby Speight, aber statt einer älteren Version die neuere Version gewählt) Ausführung)