it-swarm.com.de

Selen mit Python - Die ausführbare Geckodriver-Datei muss sich in PATH befinden

Ich bin neu im Programmieren und habe vor etwa 2 Monaten mit Python angefangen und gehe über Sweigarts Automate the Boring Stuff mit Python text. Ich benutze IDLE und habe bereits das Selenium-Modul und den Firefox-Browser installiert ... Wenn ich versucht habe, die Webtreiber-Funktion auszuführen, bekomme 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 Pfad für geckodriver setzen, aber nicht sicher wie, also kann mir jemand sagen, wie ich das machen würde?

306
tadm123

Selenium.common.exceptions.WebDriverException: Nachricht: Die 'geckodriver' - ausführbare Datei muss sich in PATH befinden. 

Zuerst müssen Sie den neuesten ausführbaren Geckodriver von hier herunterladen, um den neuesten Firefox mit Selenium auszuführen.

Tatsächlich Die Selenium-Clientbindungen versuchen, die ausführbare Datei geckodriver im System PATH zu finden. 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 anzufügen, wenn Sie eine bash-kompatible Shell verwenden:

    export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
    
  • Unter Windows müssen Sie die Systemvariable Path aktualisieren, um den vollständigen Verzeichnispfad zur ausführbaren Datei geckodriver _ ​​ manuell oder Befehlszeilehinzuzufügen System nach dem Hinzufügen eines ausführbaren Gecko-Treibers in das System PATH, um wirksam zu werden). Das Prinzip ist das gleiche wie bei Unix. 

Jetzt können Sie Ihren Code wie folgt ausführen: -

from Selenium import webdriver

browser = webdriver.Firefox()

Selenium.common.exceptions.WebDriverException: Nachricht: Erwarteter binärer Speicherort des Browsers, aber binärer Speicherort kann nicht am Standardspeicherort gefunden werden. Keine 'moz: firefoxOptions.binary'-Funktion und kein binäres Flag in der Befehlszeile gesetzt

Eine Ausnahme gibt eindeutig an, dass Sie Firefox an einem anderen Speicherort installiert haben, während Selenium versucht, Firefox zu finden und vom Standardspeicherort aus zu starten. Sie müssen explizit firefox installierte binäre Position angeben, um Firefox wie folgt zu starten: -

from Selenium import webdriver
from Selenium.webdriver.firefox.firefox_binary import FirefoxBinary

binary = FirefoxBinary('path/to/installed firefox binary')
browser = webdriver.Firefox(firefox_binary=binary)
264
Saurabh Gaur

Das hat es für mich gelöst.

from Selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
92
Nesa

diese Schritte haben sich für mich auf Ubuntu Firefox 50 gelöst.

  1. Geckodriver herunterladen

  2. Kopieren Sie den Geckodriver nach/usr/local/bin

Sie müssen NICHT hinzufügen 

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
91

Die Antwort von @saurabh löst das Problem, erklärt jedoch nicht, warum Automate the Boring Stuff mit Python diese Schritte nicht enthält.

Dies ist darauf zurückzuführen, dass das Buch auf Selenium 2.x basiert und der Firefox-Treiber für diese Serie keinen Geckotreiber benötigt. Die Gecko-Oberfläche zum Steuern des Browsers war bei der Entwicklung von Selenium nicht verfügbar.

Die neueste Version in der Selenium 2.x-Serie ist 2.53.6 (siehe diese Antworten , um die Versionen einfacher zu sehen).

Die 2.53.6-Versionsseite erwähnt Gecko überhaupt nicht. Aber seit Version 3.0.2 muss in der Dokumentation explizit angegeben der Geckotreiber installiert werden.

Wenn nach einem Upgrade (oder einer Installation auf einem neuen System) Ihre Software, die vor (oder auf Ihrem alten System) einwandfrei funktioniert hat, nicht mehr funktioniert und Sie es eilig haben, setzen Sie die Selenium-Version in Ihre Virtualenv ein, indem Sie dies tun

pip install Selenium==2.53.6

die langfristige Lösung für die Entwicklung besteht jedoch darin, eine neue virtualenv mit der neuesten Version von Selenium einzurichten, den Geckotreiber zu installieren und zu testen, ob alles noch wie erwartet funktioniert. Der Major-Version-Bump führt jedoch möglicherweise zu anderen API-Änderungen, die nicht in Ihrem Buch enthalten sind. Daher sollten Sie bei dem älteren Selenium bleiben, bis Sie sicher genug sind, dass Sie Abweichungen zwischen der Selenium2- und Selenium3-API selbst beheben können.

25
Anthon

Auf macOS mit bereits installiertem Homebrew können Sie einfach den Terminal-Befehl ausführen

$ brew install geckodriver

Da Homebrew die PATH bereits erweitert hat, müssen keine Startskripts geändert werden.

13
roskakori

Geckodriver für Selenium Python einrichten:

Es muss der Geckodriver-Pfad mit FirefoxDriver wie folgt eingestellt werden:

self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')

Laden Sie geckodriver für Ihr passendes Betriebssystem herunter (von https://github.com/mozilla/geckodriver/releases ) -> Entpacken Sie es in einen Ordner Ihrer Wahl -> Legen Sie den Pfad wie oben erwähnt richtig fest

Ich verwende Python 3.6.2 und Selenium WebDriver 3.4.3 unter Windows 10.

Eine andere Methode zum Einrichten von Geckodriver:

i) Fügen Sie die geckodriver.exe einfach unter/Python/Scripts/ein (in meinem Fall lautete der Ordner: C:\Python36\Scripts)
ii) Schreiben Sie nun den einfachen Code wie folgt:

self.driver = webdriver.Firefox()
12
Ripon Al Wasim

Schritte für MAC:

Die einfache Lösung ist, GeckoDriver herunterzuladen und zu Ihrem Systempfad hinzuzufügen. Sie können einen der beiden Ansätze verwenden:

Kurze Methode:

1) Laden Sie herunter und entpacken Sie Geckodriver .

2) Erwähnen Sie den Pfad, während Sie den Treiber einleiten:

driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')

Lange Methode:

1) Laden Sie herunter und entpacken Sie Geckodriver .

2) Öffnen Sie .bash_profile. Wenn Sie es noch nicht erstellt haben, können Sie dies mit folgendem Befehl tun: touch ~/.bash_profile. Dann öffnen Sie es mit: open ~/.bash_profile

3) Wenn sich die GeckoDriver-Datei in Ihrem Downloads-Ordner befindet, können Sie der .bash_profile-Datei die folgenden Zeilen hinzufügen:

PATH="/Users/<your-name>/Downloads/geckodriver:$PATH"
export PATH

Damit hängen Sie den Pfad zu GeckoDriver an Ihren Systempfad an. Dadurch wird dem System mitgeteilt, wo sich GeckoDriver befindet, wenn Sie Ihre Selenium-Skripts ausführen. 

4) Speichern Sie den .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 ist es. Du bist fertig!. Sie können das Python-Skript jetzt ausführen.

5
Umang Sardesai

Einige zusätzliche Eingaben/Erläuterungen für zukünftige Leser dieses Threads:

Zur Auflösung von Windows 7, Python 3.6, Selenium 3.11 genügt Folgendes:

@ dsalajs Hinweis in diesem Thread für Unix gilt auch für Windows. basteln mit dem PFAD env. Variable auf Windows-Ebene und Neustart des Windows-Systems können vermieden werden.

(1) Laden Sie geckodriver (wie in diesem Thread zuvor beschrieben) herunter, und platzieren Sie die (entpackte) geckdriver.exe unter X:\Folder\of\your\choice

(2) Python-Codebeispiel:

import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';

from Selenium import webdriver;
browser = webdriver.Firefox();
browser.get('http://localhost:8000')
assert 'Django' in browser.title

Anmerkungen: (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 kein Server ausgeführt wird oder eine Seite mit dem Titel mit der Zeichenfolge 'Django' angezeigt wird: Selenium.common.exceptions.WebDriverException: Nachricht: Erreichte Fehlerseite: about: neterror? E = Verbindungsfehler & u = http% 3A // localhost% 3A8000/& c = UTF-8 & f = normal & d = Firefox% 20can% E2% 80%

5
Snidhi Sofpro

Der einfachste Weg für Fenster!
Ich habe gerade die neueste Version von geckodriver (ich habe win10) von here heruntergeladen und hinzugefügt, dass geckodriver.exe Datei im Python-Verzeichnis C:\Users\my.name (was sich bereits in PATH befindet) Es hat für mich gearbeitet!

4
Jalles10

Ich benutze Windows 10 und das hat für mich funktioniert:

  1. Laden Sie geckodriver von hier herunter. Laden Sie die richtige Version für den Computer herunter, den Sie verwenden
  2. Entpacken Sie die gerade heruntergeladene Datei und schneiden Sie die darin enthaltene ".exe" -Datei aus
  3. Navigieren Sie zu C: {Ihrem Python-Stammordner}. Meins war C:\Python27. Fügen Sie die Datei geckodriver.exe in diesen Ordner ein.
  4. Starten Sie Ihre Entwicklungsumgebung neu.
  5. Führen Sie den Code erneut aus. Er sollte jetzt funktionieren.
3
anotherNoob

Wenn Sie Anaconda verwenden, müssen Sie lediglich Ihre virtuelle Umgebung aktivieren und anschließend geckodriver mit dem folgenden Befehl installieren:

    conda install -c conda-forge geckodriver
3
Rodolfo Alvarez

Ubuntu 18.04+ und neueste Version von Geckodriver

Dies sollte auch für Mac oder andere * nix-Varianten funktionieren.

export GV=v0.24.0
wget "https://github.com/mozilla/geckodriver/releases/download/$GV/geckodriver-$GV-linux64.tar.gz"
tar xvzf geckodriver-$GV-linux64.tar.gz 
chmod +x geckodriver
Sudo cp geckodriver /usr/local/bin/
3
jmunsch

Ich habe herausgefunden, dass Sie den neuesten Gecko-Treiber verwenden können, ohne ihn in den Systempfad zu setzen. Momentan 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 betreibe ein VirtualEnv (das ich mit PyCharm verwalte, ich nehme an, es verwendet Pip, um alles zu installieren)

Im folgenden Code kann ich einen bestimmten Pfad für den Geckodriver verwenden, der den Parameter "executable_path" verwendet (ich habe dies durch einen Blick in Lib\site-packages\Selenium\webdriver\firefox\webdriver.py entdeckt). Hinweis Ich habe den Verdacht, dass die Reihenfolge der Parameterargumente beim Aufruf des Webtreibers wichtig ist. Aus diesem Grund ist der ausführbare_Pfad der letzte in meinem Code (2. 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 werden, wenn die von Ihnen getestete Site über ein nicht vertrauenswürdiges Zertifikat verfügt. see Wie deaktiviere ich die Warnung von Firefox für nicht vertrauenswürdige Verbindungen mit Selenium?

Nach einer Untersuchung stellte sich heraus, dass der Marionettentreiber unvollständig ist und sich noch in Bearbeitung befindet, und dass es nicht möglich war, verschiedene Funktionen oder Profiloptionen für das Ablehnen oder Einstellen von Zertifikaten festzulegen. Daher war es einfacher, ein benutzerdefiniertes Profil zu verwenden. 

Wie auch immer, hier ist der Code, wie ich den Gecko-Treiber zum Laufen gebracht habe, ohne im Pfad zu sein:

from Selenium import webdriver
from Selenium.webdriver.common.desired_capabilities import DesiredCapabilities

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True

#you probably don't need the next 3 lines they don't seem to work anyway
firefox_capabilities['handleAlerts'] = True
firefox_capabilities['acceptSslCerts'] = True
firefox_capabilities['acceptInsecureCerts'] = True

#In the next line I'm using a specific FireFox profile because
# I wanted to get around the sec_error_unknown_issuer problems with the new Firefox and Marionette driver
# I create a FireFox profile where I had already made an exception for the site I'm testing
# see https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles#w_starting-the-profile-manager

ffProfilePath = 'D:\Work\PyTestFramework\FirefoxSeleniumProfile'
profile = webdriver.FirefoxProfile(profile_directory=ffProfilePath)
geckoPath = 'D:\Work\PyTestFramework\geckodriver.exe'
browser = webdriver.Firefox(firefox_profile=profile, capabilities=firefox_capabilities, executable_path=geckoPath)
browser.get('http://stackoverflow.com')
3
Roochiedoor

Es ist wirklich ziemlich schade, dass keines der auf Selenium/Python veröffentlichten Bücher und die meisten Kommentare zu diesem Thema über Google die Pfadlogik für das Einrichten auf dem Mac nicht eindeutig erklären (alles ist Windows !!!!). Die Youtubes holen alle am "after" ab und haben die Pfadeinstellung (in meinen Augen der billige Ausweg!). Verwenden Sie für wundervolle Mac-Benutzer die folgenden Schritte, um Ihre Bash-Pfaddateien zu bearbeiten:

> $ touch ~/.bash_profile; Öffnen Sie ~/.bash_profile

Fügen Sie dann einen Pfad in etwa wie folgt hinzu: .... * # PATH für Geckodriver festlegen PATH = "/ usr/bin/geckodriver: $ {PATH}" Export PATH

PATH für Selen Firefox einstellen

PATH = “~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/firefox /: $ {PATH}” Export PATH

PATH für ausführbare Datei auf dem Firefox-Treiber einstellen

PATH = "/ Benutzer/Ihr NamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/common/service.py: $ {PATH}" Export PATH *

Das hat bei mir funktioniert. Meine Sorge ist, wann die Selenium Windows Community das echte Spiel spielen wird und uns Mac-Benutzer in ihre arrogante Clubmitgliedschaft aufnehmen wird.

2
JustASteve

Selen beantwortet diese Frage in ihrer DESCRIPTION.rst

Drivers
=======

Selenium requires a driver to interface with the chosen browser. Firefox,
for example, requires `geckodriver <https://github.com/mozilla/geckodriver/releases>`_, which needs to be installed before the below examples can be run. Make sure it's in your `PATH`, e. g., place it in `/usr/bin` or `/usr/local/bin`.

Failure to observe this step will give you an error `Selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

Laden Sie den Geckodriver einfach herunter, entpacken Sie ihn und verschieben Sie die ausführbare Datei in Ihren Ordner/usr/bin

2
Peter Graham

Besuchen Sie Gecko Driver Holen Sie sich die URL für den Geckotreiber im Downloadbereich.

Klonen Sie dieses Repo https://github.com/jackton1/script_install.git

cd script_install

Lauf

./installer --gecko-driver url_to_gecko_driver

0
jackotonye

Ich verwende Windows 10 und Anaconda2. Ich habe versucht, die Systempfadvariable einzustellen, habe aber nicht geklappt. Dann fügte ich einfach die Datei geckodriver.exe zum Ordner Anaconda2/Scripts hinzu und alles funktioniert jetzt großartig . Für mich war der Pfad: -

C:\Benutzer\Bhavya\Anaconda2\Scripts

0
Bhavya Ghai

Wenn Sie die Treiberpfade unter Windows 10 hinzufügen möchten:

  1. Klicken Sie mit der rechten Maustaste auf das Symbol "Dieser PC" und wählen Sie "Eigenschaften"  enter image description here

  2. Klicken Sie auf "Erweiterte Systemeinstellungen"

  3. Klicken Sie unten auf dem Bildschirm auf "Umgebungsvariablen"
  4. Markieren Sie im Abschnitt "Benutzervariablen" "Pfad" und klicken Sie auf "Bearbeiten".
  5. Fügen Sie die Pfade zu Ihren Variablen hinzu, indem Sie auf "Neu" klicken und den Pfad für den hinzuzufügenden Treiber eingeben und die Eingabetaste drücken.
  6. Nachdem Sie den Pfad eingegeben haben, klicken Sie auf "OK".
  7. Klicken Sie so lange auf „OK“, bis Sie alle Bildschirme geschlossen haben
0
Russ Thomas

Mac 10.12.1 Python 2.7.10 .__ diese Arbeit für mich :)

def download(url):
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
browser = webdriver.Firefox(capabilities=firefox_capabilities,
                            executable_path=r'/Users/Do01/Documents/crawler-env/geckodriver')
browser.get(url)
return browser.page_source
0
do01

Auf Raspberry Pi musste ich vom Treiber ARM erstellen und den Geckodriver- und Protokollpfad festlegen: 

Sudo nano /usr/local/lib/python2.7/dist-packages/Selenium/webdriver/firefox/webdriver.py

def __init__(self, firefox_profile=None, firefox_binary=None,
             timeout=30, capabilities=None, proxy=None,
             executable_path="/PATH/gecko/geckodriver",                     
firefox_options=None,
             log_path="/PATH/geckodriver.log"):
0
Nathan Gisvold

Für Windows-Benutzer

verwenden Sie den Originalcode wie folgt:

from Selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")

laden Sie dann den Treiber herunter von: mozilla/geckodriver

Platziere es in einem festen Pfad (permanent). Als Beispiel füge ich es ein:

C:\Python35

Gehen Sie dann zu den Umgebungsvariablen des Systems, suchen Sie im Raster "Systemvariablen" nach Pfadvariable und fügen Sie Folgendes hinzu:

; C:\Python35\geckodriver

geckodriver, nicht geckodriver.exe .

0
Ghanem