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

Lesezeit: 7 Minuten

Benutzer-Avatar
tadm123

Ich bin neu in der Programmierung und habe vor etwa zwei Monaten mit Python begonnen und gehe Sweigart’s durch Automatisieren Sie das langweilige Zeug mit Python Text. Ich benutze LEERLAUF und bereits das Selenium-Modul und den Firefox-Browser installiert.

Immer wenn ich versuchte, 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

Während der Behandlung der obigen Ausnahme ist eine weitere Ausnahme aufgetreten:

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 glaube, ich muss den Pfad für festlegen geckodriveraber ich bin mir nicht sicher wie, also wie würde ich das machen?

  • Bitte lesen Sie meine Antwort auf eine ähnliche Frage hier

    – Andreas

    23. Oktober 2016 um 21:45 Uhr

  • Ich lege die geckodriver.exe in das Python/Python35-Verzeichnis, damit sie den gleichen Pfad hat und ich noch mehr Probleme bekomme.

    – tadm123

    23. Oktober 2016 um 22:18 Uhr

  • Auf dem Mac: brew install geckodriver

    – Nostalgie.io

    15. November 2016 um 7:43 Uhr

  • Ich habe festgestellt, dass die Ausführung über den Chrome-Browser etwas schneller ist als mit Firefox, Sie müssen nur die herunterladen chromedriver dafür.

    – tadm123

    27. November 2016 um 23:22 Uhr


  • Hinweis: Es gibt Testcafé das wurde vor kurzem Open-Source. Es erfordert keine Browser-Plugins, sie sind integriert. Ich wollte Selen verwenden, aber das sieht nach einer interessanten Alternative aus.

    – Ehvince

    9. Dezember 2016 um 13:07 Uhr

Dies 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')

  • Wenn Sie eine falsche Berechtigung erhalten, versuchen Sie, sie zu entfernen [r’] aus dem Pfad einfach “excecutable_path=’path\to\your’directory'”

    – Darius

    4. November 2017 um 8:17 Uhr

  • @adityarawat welches Betriebssystem hast du?

    – Nesa

    9. Mai 2018 um 13:50 Uhr

  • aber jetzt bekomme ich OSError statt falscher Berechtigungen. Ich habe es irgendwie geschafft, Geckodriver nach /usr/local/bin zu kopieren. aber jetzt bringt mich dieser neue Fehler um

    – aditya rawat

    9. Mai 2018 um 14:06 Uhr

  • @adityarawat Sie können Geckodriver unabhängig von hier herunterladen: github.com/mozilla/geckodriver/releases extrahiere es mit tar und mache es ausführbar mit chmod +x, es muss nicht in /usr/local/bin sein, du musst nur deinen Pfad dorthin angeben

    – Nesa

    9. Mai 2018 um 14:15 Uhr


  • Nur um klar zu sein, ich habe die Datei arm7hf.tar heruntergeladen und auch extrahiert und mit dem Befehl zum Pfad hinzugefügt export PATH=$PATH:geckodriver (es wird in Desktop extrahiert). Aber es half auch nichts. Ich bekomme immer noch OSError[errno 8 ]

    – aditya rawat

    9. Mai 2018 um 14:22 Uhr

  • In Ihrem Code können Sie die Fähigkeitsvariable nicht hinzufügen

    – Andrea Perdicchia

    12. Januar 2017 um 7:47 Uhr

  • Weißt du zufällig, wie man das Download-Verzeichnis für Firefox einstellt? Ich habe die folgende Frage zum Einstellen der Firefox-Einstellungen hinzugefügt. Jede Hilfe wäre sehr willkommen.

    – d84_n1nj4

    16. Januar 2017 um 16:00 Uhr

  • In Debian oder Ubuntu müssen Sie den Befehl apt verwenden, um Firefox zu installieren. Für Windows habe ich keine Ahnung, sorry

    – Andrea Perdicchia

    16. Januar 2017 um 16:40 Uhr

  • Vielen Dank. Nachdem ich diese Antwort angewendet hatte, habe ich diese Lösung weiter verwendet, um ein Folgeproblem zu behandeln: stackoverflow.com/questions/43713445/…

    – HackNone

    12. Juli 2017 um 9:03 Uhr

  • Danke, Pycharm hat Geckodriver nicht gefunden, obwohl es sich in Home und im Projektordner selbst befand, aber nachdem es nach /usr/local/bin verschoben wurde, funktionierte es perfekt

    – Ronald Das

    11. Mai 2018 um 8:19 Uhr

Benutzer-Avatar
Navarasu

Ich sehe, dass die Diskussionen immer noch über die alte Art der Einrichtung von Geckodriver sprechen, indem die Binärdatei heruntergeladen und der Pfad manuell konfiguriert wird.

Dies kann automatisch mit erfolgen webdriver-manager

pip install webdriver-manager

Jetzt funktioniert der obige Code in der Frage einfach mit der folgenden Änderung,

from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())

  • Hat Safari oder sogar Internet Explorer einen ähnlichen Treibermanager?

    – Mischief_Monkey

    21. Mai 2020 um 14:32 Uhr

  • Oder verwenden pip3?

    – Peter Mortensen

    6. November 2020 um 7:07 Uhr

  • Es funktioniert irgendwie, aber ich denke geckodriver muss im Weg sein. Vorübergehend, wie: export PATH=$PATH:/home/embo/.wdm/drivers/geckodriver/linux64/v0.28.0

    – Peter Mortensen

    6. November 2020 um 7:20 Uhr


  • Genial! Das ist so viel einfacher!

    – Tmfwang

    5. März 2021 um 10:20 Uhr

  • Tausend Dank. Dies war das einzige, was funktionierte. Ich habe einen Cron-Job ausgeführt, der ein Programm für einen Thread hervorgebracht hat, in dem Selen ausgeführt wurde.

    – Magische Lampe

    13. Januar um 13:06 Uhr

Benutzer-Avatar
Peter Mortensen

Unter macOS mit Hausgemacht bereits installiert, können Sie einfach den Terminal-Befehl ausführen:

brew install geckodriver

Denn Homebrew hat das schon erweitert PATH Es besteht keine Notwendigkeit, Startskripte zu ändern.

  • Hat Safari oder sogar Internet Explorer einen ähnlichen Treibermanager?

    – Mischief_Monkey

    21. Mai 2020 um 14:32 Uhr

  • Oder verwenden pip3?

    – Peter Mortensen

    6. November 2020 um 7:07 Uhr

  • Es funktioniert irgendwie, aber ich denke geckodriver muss im Weg sein. Vorübergehend, wie: export PATH=$PATH:/home/embo/.wdm/drivers/geckodriver/linux64/v0.28.0

    – Peter Mortensen

    6. November 2020 um 7:20 Uhr


  • Genial! Das ist so viel einfacher!

    – Tmfwang

    5. März 2021 um 10:20 Uhr

  • Tausend Dank. Dies war das einzige, was funktionierte. Ich habe einen Cron-Job ausgeführt, der ein Programm für einen Thread hervorgebracht hat, in dem Selen ausgeführt wurde.

    – Magische Lampe

    13. Januar um 13:06 Uhr

Benutzer-Avatar
Peter Mortensen

Die Antwort von saurabh löst das Problem, erklärt aber nicht warum Automatisieren Sie das langweilige Zeug mit Python enthält diese Schritte nicht.

Dies wird dadurch verursacht, dass das Buch auf Selenium 2.x basiert und der Firefox-Treiber für diese Reihe den Gecko-Treiber nicht benötigt. Die Gecko-Schnittstelle zum Steuern des Browsers war nicht verfügbar, als Selenium entwickelt wurde.

Das letzte Version in der Selenium 2.x-Serie ist 2.53.6 (siehe zB diese Antworten für eine einfachere Ansicht der Versionen).

Das Versionsseite 2.53.6 erwähnt Gecko überhaupt nicht. Aber seit Version 3.0.2 die Dokumentation ausdrücklich erklärt Sie müssen den Gecko-Treiber installieren.

Wenn nach einem Upgrade (oder der Installation auf einem neuen System) Ihre Software, die vorher (oder auf Ihrem alten System) gut funktioniert hat, nicht mehr funktioniert und Sie es eilig haben, pinnen Sie die Selenium-Version in Ihrer virtuellen Umgebung an, indem Sie dies tun

pip install selenium==2.53.6

Aber die langfristige Lösung für die Entwicklung besteht natürlich darin, eine neue virtuelle Umgebung mit der neuesten Version von Selenium einzurichten, den Gecko-Treiber zu installieren und zu testen, ob alles noch wie erwartet funktioniert.

Aber der große Versionsstoß könnte andere API-Änderungen einführen, die nicht in Ihrem Buch behandelt werden, also sollten Sie vielleicht beim älteren Selenium bleiben, bis Sie sicher genug sind, dass Sie alle Diskrepanzen zwischen der Selenium 2- und Selenium 3-API selbst beheben können.

1124690cookie-checkSelenium mit Python – Die ausführbare Geckodriver-Datei muss sich in PATH befinden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy