Ich bin neu in der Programmierung und habe mit angefangen Python
ungefähr 2 Monaten und gehe Sweigarts Automate the Boring Stuff mit Python- Text durch. Ich verwende IDLE und habe bereits das Selen-Modul und den Firefox-Browser installiert. Immer wenn ich versucht habe, die Webdriver-Funktion auszuführen, erhalte ich Folgendes:
from selenium import webdriver
browser = webdriver.Firefox()
Ausnahme: -
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0E08128>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 64, in start
stdout=self.log_file, stderr=self.log_file)
File "C:\Python\Python35\lib\subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "C:\Python\Python35\lib\subprocess.py", line 1224, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
browser = webdriver.Firefox()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 135, in __init__
self.service.start()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
Ich denke, ich muss den Weg festlegen, bin mir geckodriver
aber nicht sicher, wie. Kann mir jemand sagen, wie ich das machen soll?
brew install geckodriver
chromedriver
. Dazu müssen Sie nur das herunterladen .Antworten:
Zunächst müssen Sie den neuesten ausführbaren Geckodriver von hier herunterladen, um den neuesten Firefox mit Selen auszuführen
Tatsächlich versuchen die Selenium-Client-Bindungen, die
geckodriver
ausführbare Datei vom System aus zu findenPATH
. Sie müssen das Verzeichnis mit der ausführbaren Datei zum Systempfad hinzufügen.Auf Unix-Systemen können Sie Folgendes tun, um es an den Suchpfad Ihres Systems anzuhängen, wenn Sie eine Bash-kompatible Shell verwenden:
Unter Windows müssen Sie die Systemvariable Path aktualisieren , um den vollständigen Verzeichnispfad manuell oder über die Befehlszeile zum ausführbaren Geckodriver hinzuzufügen (vergessen Sie nicht, Ihr System neu zu starten, nachdem Sie den ausführbaren Geckodriver zum Systempfad hinzugefügt haben, damit er wirksam wird) . Das Prinzip ist das gleiche wie unter Unix.
Jetzt können Sie Ihren Code wie folgt ausführen: -
Die Ausnahme besagt eindeutig, dass Sie Firefox an einem anderen Ort installiert haben, während Selenium versucht, Firefox zu finden und vom Standardspeicherort aus zu starten, aber nicht gefunden werden konnte. Sie müssen den explizit installierten binären Speicherort von Firefox angeben, um Firefox wie folgt zu starten: -
quelle
geckodriver.exe
imC:\Python\Python35\selenium
Verzeichnis festgelegt und den Pfad wie von Ihnen beschrieben festgelegt, aber es gibt mir den folgenden Fehler:PATH
In-Unix-Umgebung erweitern. Sie können es in Code setzen, da Sie es nicht systemweit benötigen:os.environ["PATH"] += os.pathsep + 'path/to/dir/containing/geckodriver/'
Oder behalten Sie einfach die Geckodriver-Binärdatei in dem Verzeichnis, das sich bereits in Ihrem Pfad befindet:mv geckodriver /usr/local/bin
Das hat es für mich gelöst.
quelle
export PATH=$PATH:geckodriver
(sie wird in Desktop extrahiert). Aber es hat auch nicht geholfen. Ich bekomme immer noch OSError [errno 8]Diese Schritte wurden für mich auf Ubuntu Firefox 50 gelöst.
Laden Sie geckodriver herunter
Kopieren Sie den Geckodriver in / usr / local / bin
Sie müssen NICHT hinzufügen
quelle
Die Antwort von @saurabh löst das Problem, erklärt aber nicht, warum das langweilige Zeug mit Python automatisiert wird diese Schritte nicht enthält.
Dies wird dadurch verursacht, dass das Buch auf Selen 2.x basiert und der Firefox-Treiber für diese Serie den Gecko-Treiber nicht benötigt. Die Gecko-Oberfläche zum Ansteuern des Browsers war bei der Entwicklung von Selen nicht verfügbar.
Die neueste Version der Selenium 2.x-Serie ist 2.53.6 (siehe z. B. diese Antworten für eine einfachere Ansicht der Versionen).
Auf der Versionsseite 2.53.6 wird Gecko überhaupt nicht erwähnt. Seit Version 3.0.2 heißt es in der Dokumentation jedoch ausdrücklich, dass Sie den Geckotreiber installieren müssen.
Wenn nach einem Upgrade (oder einer Installation auf einem neuen System) Ihre zuvor einwandfreie Software (oder auf Ihrem alten System) nicht mehr funktioniert und Sie es eilig haben, stecken Sie die Selen-Version in Ihre virtuelle Umgebung, indem Sie dies tun
Aber die langfristige Lösung für die Entwicklung besteht natürlich darin, eine neue virtuelle Umgebung mit der neuesten Version von Selen einzurichten, den Gecko-Treiber zu installieren und zu testen, ob alles noch wie erwartet funktioniert. Die Hauptversion führt jedoch möglicherweise zu anderen API-Änderungen, die in Ihrem Buch nicht behandelt werden. Sie sollten sich also an das ältere Selen halten, bis Sie sicher genug sind, dass Sie etwaige Diskrepanzen zwischen der Selenium2- und der Selenium3-API selbst beheben können.
quelle
Unter macOS mit bereits installiertem Homebrew können Sie einfach den Terminal-Befehl ausführen
Da Homebrew das bereits erweitert
PATH
hat, müssen keine Startskripte geändert werden.quelle
So richten Sie Geckodriver für Selenium Python ein:
Es muss den Geckodriver-Pfad mit FirefoxDriver wie folgt festlegen:
Laden Sie geckodriver für Ihr geeignetes Betriebssystem herunter (von https://github.com/mozilla/geckodriver/releases ) -> Extrahieren Sie es in einen Ordner Ihrer Wahl -> Stellen Sie den Pfad wie oben beschrieben richtig ein
Ich verwende Python 3.6.2 und Selenium WebDriver 3.4.3 in Windows 10.
Eine andere Möglichkeit, Geckodriver einzurichten:
i) Fügen Sie einfach die Datei geckodriver.exe unter / Python / Scripts / ein (in meinem Fall war der Ordner: C: \ Python36 \ Scripts)
ii) Schreiben Sie nun den einfachen Code wie folgt :
quelle
Wenn Sie Anaconda verwenden , müssen Sie lediglich Ihre virtuelle Umgebung aktivieren und dann geckodriver mit dem folgenden Befehl installieren :
quelle
Ubuntu 18.04+ und neueste Version von geckodriver
Dies sollte auch für andere * nix-Sorten funktionieren.
Für Mac Update auf:
quelle
Ich sehe, dass in den Diskussionen immer noch über die alte Methode zum Einrichten von Geckodriver gesprochen wird, indem die Binärdatei heruntergeladen und der Pfad manuell konfiguriert wird.
Dies kann automatisch mit dem Webdriver-Manager erfolgen
Jetzt funktioniert der obige Code in der Frage einfach mit der folgenden Änderung:
quelle
Der einfachste Weg für Windows!
Laden Sie die neueste Version von
geckodriver
von hier . Fügen Sie die Datei geckodriver.exe hinzu Datei dem Python-Verzeichnis (oder einem anderen Verzeichnis, das sich bereits befindetPATH
) hinzu. Dies sollte das Problem lösen (Getestet unter Windows 10)quelle
Schritte für MAC:
Die einfache Lösung besteht darin, GeckoDriver herunterzuladen und Ihrem Systempfad hinzuzufügen. Sie können einen der beiden Ansätze verwenden:
Kurze Methode:
1) Geckodriver herunterladen und entpacken .
2) Erwähnen Sie den Pfad, während Sie den Treiber starten:
Lange Methode:
1) Geckodriver herunterladen und entpacken .
2) Öffnen
.bash_profile
. Wenn Sie es noch nicht erstellt haben, können Sie dies mit dem folgenden Befehl tun :touch ~/.bash_profile
. Öffnen Sie es dann mit:open ~/.bash_profile
3) Da die GeckoDriver-Datei in Ihrem Download-Ordner vorhanden ist, können Sie der
.bash_profile
Datei die folgenden Zeilen hinzufügen :Auf diese Weise hängen Sie den Pfad zu GeckoDriver an Ihren Systempfad an. Dies teilt dem System mit, wo sich GeckoDriver befindet, wenn Sie Ihre Selenium-Skripte ausführen.
4) Speichern Sie die
.bash_profile
und erzwingen Sie die Ausführung. Dadurch werden die Werte sofort geladen, ohne dass ein Neustart erforderlich ist. Dazu können Sie den folgenden Befehl ausführen:source ~/.bash_profile
5) Das war's. Du bist fertig!. Sie können das Python-Skript jetzt ausführen.
quelle
geckodriver
mit Homebrew herunterladen :brew install geckodriver
und dann Firefox initiieren über:driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
Einige zusätzliche Beiträge / Erläuterungen für zukünftige Leser dieses Threads:
Als Lösung für Windows 7, Python 3.6, Selen 3.11 reicht Folgendes aus:
Der Hinweis von @ dsalaj in diesem Thread für Unix gilt auch für Windows. Basteln mit dem PATH env. Variablen auf Windows-Ebene und ein Neustart des Windows-Systems können vermieden werden.
(1) Laden Sie geckodriver herunter (wie in diesem Thread zuvor beschrieben) und platzieren Sie die (entpackte) geckdriver.exe unter X: \ Folder \ Ihrer \ Wahl
(2) Python-Codebeispiel:
Hinweise: (1) Es kann ungefähr 10 Sekunden dauern, bis der obige Code den Firefox-Browser für die angegebene URL öffnet.
(2) Die Python-Konsole zeigt den folgenden Fehler an, wenn auf der angegebenen URL noch kein Server ausgeführt wird oder eine Seite mit dem Titel "Django" bereitgestellt wird: selenium.common.exceptions.WebDriverException: Nachricht: Erreichte Fehlerseite: about : neterror? e = connectionFailure & u = http% 3A // localhost% 3A8000 / & c = UTF-8 & f = regulär & d = Firefox% 20can% E2% 80% 9
quelle
Ich habe tatsächlich festgestellt, dass Sie den neuesten Geckodriver verwenden können, ohne ihn in den Systempfad einzufügen. Zur Zeit benutze ich
https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip
Firefox 50.1.0
Python 3.5.2
Selen 3.0.2
Windows 10
Ich verwende ein VirtualEnv (das ich mit PyCharm verwalte, ich nehme an, es verwendet Pip, um alles zu installieren).
Im folgenden Code kann ich mithilfe des ausführbaren_Pfad-Parameters einen bestimmten Pfad für den Geckodriver verwenden (dies wurde durch einen Blick in Lib \ site-packages \ selenium \ webdriver \ Firefox \ webdriver.py festgestellt). Hinweis Ich habe den Verdacht, dass die Reihenfolge der Parameterargumente beim Aufrufen des Webtreibers wichtig ist, weshalb der ausführbare Pfad in meinem Code der letzte ist (vorletzte Zeile ganz rechts).
Möglicherweise stellen Sie auch fest, dass ich ein benutzerdefiniertes Firefox-Profil verwende, um das Problem sec_error_unknown_issuer zu umgehen, auf das Sie stoßen, wenn die Site, die Sie testen, über ein nicht vertrauenswürdiges Zertifikat verfügt. sehen So deaktivieren Sie die nicht vertrauenswürdige Verbindungswarnung von Firefox mithilfe von Selenium.
Nach einer Untersuchung wurde festgestellt, dass der Marionetten-Treiber unvollständig ist und sich noch in Bearbeitung befindet und dass das Festlegen verschiedener Funktionen oder Profiloptionen zum Entlassen oder Festlegen von Zertifikaten nicht funktionieren würde. Es war also einfacher, ein benutzerdefiniertes Profil zu verwenden.
Wie auch immer, hier ist der Code, wie ich den Geckodriver zum Arbeiten gebracht habe, ohne im Pfad zu sein:
quelle
Ich benutze Windows 10 und das hat bei mir funktioniert:
quelle
Erwägen Sie die Installation eines containerisierten Firefox:
Verbinden mit
webdriver.Remote
:quelle
Es ist wirklich ziemlich traurig, dass keines der auf Selenium / Python veröffentlichten Bücher und die meisten Kommentare zu diesem Thema über Google die Pfadlogik für die Einrichtung auf dem Mac nicht klar erklären (alles ist Windows !!!!). Die Youtubes nehmen alle am "After" auf, wenn Sie das Pathing-Setup haben (meiner Meinung nach der billige Ausweg!). Verwenden Sie für wundervolle Mac-Benutzer Folgendes, um Ihre Bash-Pfad-Dateien zu bearbeiten:
> $ touch ~ / .bash_profile; öffne ~ / .bash_profile
Fügen Sie dann einen Pfad wie diesen hinzu ... * # PATH für geckodriver festlegen PATH = "/ usr / bin / geckodriver: $ {PATH}" export PATH
PATH für Selenium Firefox einstellen
PATH = "~ / Users / yourNamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / selenium / webdriver / Firefox /: $ {PATH}" export PATH
Festlegen des Pfads für die ausführbare Datei im Firefox-Treiber
PATH = "/ Users / yournamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / selenium / webdriver / common / service.py: $ {PATH}" export PATH *
Das hat bei mir funktioniert. Ich mache mir Sorgen, wann die Selenium Windows-Community mit dem Spielen des echten Spiels beginnt und uns Mac-Benutzer in ihre arrogante Clubmitgliedschaft einbezieht.
quelle
Selen beantwortet diese Frage in ihrer DESCRIPTION.rst
Laden Sie einfach den Geckodriver herunter, entpacken Sie ihn und verschieben Sie die ausführbare Datei in Ihren Ordner / usr / bin
quelle
Verwenden Sie den Originalcode wie folgt:
Laden Sie dann den Treiber herunter von: mozilla / geckodriver
Platziere es in einem festen Pfad (dauerhaft). Als Beispiel habe ich es eingefügt in:
Gehen Sie dann zu den Umgebungsvariablen des Systems, suchen Sie im Raster "Systemvariablen" nach der Pfadvariablen und fügen Sie hinzu:
geckodriver, nicht geckodriver.exe .
quelle
Auf Raspberry Pi musste ich aus dem ARM-Treiber erstellen und den Geckodriver und den Anmeldepfad festlegen:
sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
quelle
Wenn Sie die virtuelle Umgebung und win10 verwenden (möglicherweise für andere Systeme), müssen Sie nur geckodriver.exe in den folgenden Ordner in Ihrem Verzeichnis der virtuellen Umgebung legen:
... \ my_virtual_env_directory \ Scripts \ geckodriver.exe
quelle
Dadurch erhalten Sie den Pfad zu Ihrer gekodriver.exe unter Windows
quelle
Mac 10.12.1 Python 2.7.10 diese Arbeit für mich :)
quelle
Ich benutze Windows 10 und Anaconda2. Ich habe versucht, die Systempfadvariable festzulegen, aber es hat nicht funktioniert. Dann habe ich einfach die Datei geckodriver.exe zum Ordner Anaconda2 / Scripts hinzugefügt und jetzt funktioniert alles hervorragend. Für mich war der Weg:
C: \ Benutzer \ Bhavya \ Anaconda2 \ Skripte
quelle
Wenn Sie die Treiberpfade unter Windows 10 hinzufügen möchten:
Klicken Sie mit der rechten Maustaste auf das Symbol "Dieser PC" und wählen Sie "Eigenschaften".
Klicken Sie auf "Erweiterte Systemeinstellungen".
quelle
Besuchen Sie den Gecko-Fahrer Die URL für den Gecko-Treiber finden Sie im Abschnitt Downloads.
Klonen Sie dieses Repo https://github.com/jackton1/script_install.git
cd script_install
Lauf
quelle
quelle
Für mich war es genug, nur Geckodriver in derselben Umgebung zu installieren:
und der Code wurde nicht geändert:
quelle
Um meine 5 Cent hinzuzufügen, ist es auch möglich,
echo PATH
(Linux) zu tun und Geckodriver einfach in den Ordner zu verschieben, den Sie mögen. Wenn ein Systemordner (keine virtuelle Umgebung) das Ziel ist, kann global auf den Treiber zugegriffen werden.quelle