Selen używający Pythona - plik wykonywalny Geckodriver musi znajdować się w zmiennej PATH

435

Jestem nowy w programowaniu i zacząłem z Pythonokoło 2 miesiące temu i omawiam Automate the Boring Stuff z tekstem Python . Używam IDLE i już zainstalowałem moduł selenium i przeglądarkę Firefox. Ilekroć próbowałem uruchomić funkcję webdriver, otrzymuję to:

from selenium import webdriver
browser = webdriver.Firefox()

Wyjątek:

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. 

Myślę, że muszę wyznaczyć ścieżkę, geckodriverale nie jestem pewien, jak to zrobić, więc czy ktoś może mi powiedzieć, jak to zrobić?

tadm123
źródło
2
Proszę zobaczyć moją odpowiedź na podobne pytanie tutaj
Andrew
Umieszczam geckodriver.exe w katalogu Python / Python35, aby miał tę samą ścieżkę i mam coraz więcej problemów.
tadm123
80
Na Macu:brew install geckodriver
Nostalg.io,
1
Przekonałem się, że uruchomienie go za pomocą przeglądarki Chrome jest nieco szybsze niż w przeglądarce Firefox, po prostu musisz to pobrać chromedriver.
tadm123
Uwaga: istnieje Testcafe, który niedawno został otwarty. Nie wymaga żadnych wtyczek do przeglądarek, są one wbudowane. Chciałem użyć Selenium, ale wygląda to na interesującą alternatywę.
Ehvince,

Odpowiedzi:

355

selenium.common.exceptions.WebDriverException: Komunikat: Plik wykonywalny „geckodriver” musi znajdować się w zmiennej PATH.

Przede wszystkim musisz pobrać stąd najnowszy wykonywalny geckodriver, aby uruchomić najnowszego firefoxa za pomocą selenu

W rzeczywistości Powiązania klienta Selenium próbują zlokalizować geckodriverplik wykonywalny z systemu PATH. Musisz dodać katalog zawierający plik wykonywalny do ścieżki systemowej.

  • W systemach Unix możesz wykonać następujące czynności, aby dołączyć go do ścieżki wyszukiwania systemu, jeśli używasz powłoki kompatybilnej z bash:

    export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
  • W systemie Windows należy zaktualizować zmienną systemową Path, aby ręcznie dodać pełną ścieżkę katalogu do wykonywalnego geckodrivera lub wiersza poleceń (nie zapomnij zrestartować systemu po dodaniu wykonywalnego geckodriver do PATH systemowego, aby odnieść skutek) . Zasada jest taka sama jak w Uniksie.

Teraz możesz uruchomić swój kod tak samo jak poniżej: -

from selenium import webdriver

browser = webdriver.Firefox()

selenium.common.exceptions.WebDriverException: Komunikat: Oczekiwana lokalizacja binarna przeglądarki, ale nie można znaleźć pliku binarnego w lokalizacji domyślnej, brak możliwości „moz: firefoxOptions.binary” i nie ustawiono flagi binarnej w wierszu poleceń

Wyjątek wyraźnie stwierdza, że ​​zainstalowałeś firefox w innej lokalizacji, podczas gdy Selenium próbuje znaleźć firefoxa i uruchomić z domyślnej lokalizacji, ale nie mógł go znaleźć. Musisz podać jawnie zainstalowaną lokalizację binarną firefox, aby uruchomić firefox, jak poniżej: -

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)
Saurabh Gaur
źródło
8
Dzięki, ale ustawiłem mój geckodriver.exew C:\Python\Python35\seleniumkatalogu i ustawiłem ścieżkę tak, jak opisałeś, ale wyświetla mi się błąd poniżej:
tadm123 24.10.16
4
Dzięki @Saurabh Gaur, teraz działa. Dodałem ścieżkę Firefoksa do zmiennych systemowych ręcznie i wszystko działa. Uruchomienie zajmuje trochę czasu, ale domyślam się, że to normalne. Dzięki!
tadm123
3
Na początku pojawił się błąd „Wyjątek WebDriver: Komunikat: Nie udało się uruchomić przeglądarki: odmowa uprawnień”, kiedy zacząłem określać ścieżkę binarną firefox, ale ponowne uruchomienie komputera (Windows 10) rozwiązało problem. - Na wypadek, gdyby ktokolwiek inny napotkał ten sam problem co ja.
NoSuchElephantException
3
Co to jest plik binarny? Czy to oznacza plik wykonywalny?
Użytkownik
12
Oprócz tej odpowiedzi chciałbym rozwinąć ustawienia środowiska PATHin unix. Możesz ustawić go w kodzie, ponieważ nie jest potrzebny os.environ["PATH"] += os.pathsep + 'path/to/dir/containing/geckodriver/' w całym systemie: Lub po prostu przechowuj plik binarny geckodriver w katalogu, który jest już na twojej ścieżce:mv geckodriver /usr/local/bin
dsalaj
161

To rozwiązało dla mnie.

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
Nesa
źródło
Jeśli dostaniesz złe pozwolenie, spróbuj usunąć [r '] ze ścieżki, po prostu „excecutable_path =' path \ to \ your'diretory '”
Dariusz
@adityarawat na jakim systemie operacyjnym jesteś?
Nesa,
ale teraz otrzymuję OSError zamiast złych uprawnień. Jakoś udało mi się skopiować geckodriver do / usr / local / bin. ale teraz ten nowy błąd mnie zabija
aditya rawat
@adityarawat możesz pobrać geckodriver niezależnie od tego tutaj: github.com/mozilla/geckodriver/releases wyodrębnij go za pomocą tar i spraw , aby był wykonywalny za pomocą chmod + x, nie musi być w / usr / local / bin, po prostu masz określić swoją ścieżkę do niego
Nesa
dla jasności pobrałem plik arm7hf.tar, wyodrębniłem go i dodałem do ścieżki za pomocą polecenia export PATH=$PATH:geckodriver(wyodrębniono go na pulpicie). Ale to też nie pomogło. I jeszcze dostać OSError errno [8]
Aditya Rawat
121

to kroki ROZWIĄZANE dla mnie na Ubuntu Firefox 50.

  1. Pobierz geckodriver

  2. Skopiuj geckodriver do / usr / local / bin

NIE musisz dodawać

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
Andrea Perdicchia
źródło
W kodzie nie można dodać zmiennej zdolności
Andrea Perdicchia
Czy wiesz, jak ustawić katalog pobierania przeglądarki Firefox? Dodałem następujące pytanie Ustaw preferencje Firefoksa . Każda pomoc będzie mile widziana.
d84_n1nj4
W Debianie lub Ubuntu musisz użyć polecenia apt, aby zainstalować Firefoksa. W przypadku systemu Windows nie mam pojęcia, przepraszam
Andrea Perdicchia
Dzięki. Po zastosowaniu tej odpowiedzi skorzystałem z tego rozwiązania w celu rozwiązania kolejnego problemu: stackoverflow.com/questions/43713445/…
HackNone
Dzięki, Pycharm nie znalazł geckodrivera, chociaż był w domu iw samym folderze projektu, ale po przeniesieniu go do / usr / local / bin zadziałał idealnie
Ronald Das
32

Odpowiedź @saurabh rozwiązuje problem, ale nie wyjaśnia, dlaczego Automatyzacja nudnych rzeczy za pomocą Pythona nie obejmuje tych kroków.

Jest to spowodowane tym, że książka oparta jest na selenium 2.x, a sterownik Firefoksa dla tej serii nie potrzebuje sterownika gecko. Interfejs Gecko do sterowania przeglądarką nie był dostępny podczas opracowywania selenu.

Najnowsza wersja z serii 2.x selen jest 2.53.6 (patrz np to odpowiedź dla łatwiejszego widzenia wersjach).

Strona wersji 2.53.6 w ogóle nie wspomina o gekonie . Ale od wersji 3.0.2 dokumentacja wyraźnie stwierdza, że musisz zainstalować sterownik gecko.

Jeśli po aktualizacji (lub instalacji w nowym systemie) oprogramowanie, które działało dobrze wcześniej (lub w starym systemie) już nie działa i się spieszysz, przypnij wersję selenium w swoim virtualenv, wykonując

pip install selenium==2.53.6

ale oczywiście długoterminowym rozwiązaniem dla programistów jest zainstalowanie nowego virtualenv z najnowszą wersją selenu, zainstalowanie sterownika gecko i sprawdzenie, czy wszystko nadal działa zgodnie z oczekiwaniami. Ale znaczny wzrost wersji może wprowadzić inne zmiany API, które nie są objęte twoją książką, więc możesz chcieć trzymać się starszego selenu, dopóki nie będziesz wystarczająco pewny, że możesz samodzielnie naprawić wszelkie rozbieżności między API selenium2 i selenium3.

Anthon
źródło
2
Chciałbym, żeby to była najlepsza odpowiedź
sudo-nim
1
pomogło mi to, dzięki Anthon
ghost21blade
24

W systemie macOS z zainstalowanym Homebrew możesz po prostu uruchomić polecenie Terminal

$ brew install geckodriver

Ponieważ homebrew już rozszerzył PATH, nie trzeba modyfikować żadnych skryptów startowych.

roskakori
źródło
@roskakori Zrobiłem to i zostało pomyślnie zainstalowane, ale wciąż pojawia się ten sam błąd
JKC
To mi zrobiło, dzięki. Korzystanie z Firefox 72.0.2 i Selenium 3.141.0
Sam
17

Aby skonfigurować geckodriver dla Selenium Python:

Musi ustawić ścieżkę geckodriver za pomocą FirefoxDriver jak poniżej:

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

Pobierz geckodriver dla odpowiedniego systemu operacyjnego (z https://github.com/mozilla/geckodriver/releases ) -> Wyodrębnij go w wybranym folderze -> Ustaw poprawnie ścieżkę, jak wspomniano powyżej

Używam Python 3.6.2 i Selenium WebDriver 3.4.3 w Windows 10.

Inny sposób konfiguracji geckodriver:

i) Po prostu wklej geckodriver.exe w / Python / Scripts / (W moim przypadku folder to: C: \ Python36 \ Scripts)
ii) Teraz napisz prosty kod jak poniżej:

self.driver = webdriver.Firefox()
Ripon Al Wasim
źródło
17

Jeśli używasz Anacondy , wszystko, co musisz zrobić, to aktywować środowisko wirtualne, a następnie zainstalować geckodriver za pomocą następującego polecenia :

    conda install -c conda-forge geckodriver
Rodolfo Alvarez
źródło
Tak, instaluje geckodriver, ale błąd pycharm pozostaje taki sam.
WebComer
Cześć, próbowałem wielu rzeczy i to jedyna rzecz, która zadziałała dla mnie :-) dziękuję
tezzaaa
12

Ubuntu 18.04+ i najnowsza wersja geckodriver

Powinno to również działać dla innych odmian * nix.

export GV=v0.26.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/

W przypadku aktualizacji systemu Mac do:

geckodriver-$GV-macos.tar.gz
jmunsch
źródło
12

Widzę, że dyskusje wciąż mówią o starym sposobie konfigurowania geckodriver poprzez pobieranie pliku binarnego i ręczne konfigurowanie ścieżki.

Można to zrobić automatycznie za pomocą webdriver-manager

pip install webdriver-manager

Teraz powyższy kod w pytaniu będzie działał z poniższą zmianą,

from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
Navarasu
źródło
2
To zadziałało dla mnie. Dzięki!
igorkf
Czy Safari, a nawet Internet Explorer ma podobnego menedżera sterowników?
Mischief_Monkey
11

Najłatwiejszy sposób na Windows!
Pobierz najnowszą wersję geckodriverz tutaj . Dodaj plik geckodriver.exe do katalogu python (lub dowolnego innego katalogu, który już znajduje się w katalogu PATH). To powinno rozwiązać problem (testowany w systemie Windows 10)

Jalles10
źródło
Windows nie jest najgorszy. Dzięki za szybkie rozwiązanie.
AJ_
To zdecydowanie najłatwiejsze rozwiązanie !! Nie musisz nawet ponownie uruchamiać komputera!
olenscki
8

Kroki dla MAC:

Prostym rozwiązaniem jest pobranie GeckoDriver i dodanie go do ŚCIEŻKI systemu. Możesz użyć jednego z dwóch podejść:

Krótka metoda:

1) Pobierz i rozpakuj Geckodriver .

2) Podaj ścieżkę podczas inicjowania sterownika:

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

Długa metoda:

1) Pobierz i rozpakuj Geckodriver .

2) Otwórz .bash_profile. Jeśli nie stworzyli go jeszcze, można to zrobić za pomocą polecenia: touch ~/.bash_profile. Następnie otwórz za pomocą:open ~/.bash_profile

3) Biorąc pod uwagę, że plik GeckoDriver znajduje się w folderze Pobrane, możesz dodać do .bash_profilepliku następujące linie :

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

W ten sposób dołączasz ścieżkę do GeckoDriver do ŚCIEŻKI Systemu. Informuje to system, w którym znajduje się GeckoDriver podczas wykonywania skryptów Selenium.

4) Zapisz .bash_profilei zmuś go do wykonania. Spowoduje to natychmiastowe załadowanie wartości bez konieczności ponownego uruchamiania. Aby to zrobić, możesz uruchomić następujące polecenie:

source ~/.bash_profile

5) To wszystko. ZROBIŁO SIĘ! Możesz teraz uruchomić skrypt w języku Python.

Umang Sardesai
źródło
1
Udało mi się pobrać za geckodriverpomocą Homebrew: brew install geckodrivera następnie uruchomić Firefoksa przez:driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
Winterflags
7

Dodatkowe informacje / wyjaśnienia dla przyszłych czytelników tego wątku:

Jako rozdzielczość dla systemu Windows 7, Python 3.6, selen 3.11 wystarcza:

Uwaga @ dsalaj w tym wątku wcześniej dla Uniksa dotyczy również systemu Windows; majsterkowanie przy PATH env. zmiennej na poziomie Windows i ponownym uruchomieniu systemu Windows można uniknąć.

(1) Pobierz geckodriver (jak opisano wcześniej w tym wątku) i umieść (rozpakowany) geckdriver.exe w X: \ Folder \ of \ your \ choice

(2) Przykładowy kod Python:

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

Uwagi: (1) Powyższy kod może zająć około 10 sekund, aby otworzyć przeglądarkę Firefox dla określonego adresu URL.
(2) Konsola python wyświetli następujący błąd, jeśli pod podanym adresem URL nie działa już serwer ani nie wyświetla strony o tytule zawierającym ciąg „Django”: selenium.common.exceptions.WebDriverException: Komunikat: Osiągnięto stronę błędu: około : neterror? e = połączenie Niepowodzenie & u = http% 3A // localhost% 3A8000 / & c = UTF-8 & f = regularne & d = Firefox% 20 może% E2% 80% 9

Snidhi Sofpro
źródło
Dzięki, wypróbowałem wszystkie inne rozwiązania, ale tylko twoje działało na moim systemie Windows!
pso
4

Odkryłem, że możesz używać najnowszego geckodrivera bez umieszczania go na ścieżce systemowej. Obecnie używam

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

Korzystam z VirtualEnv (którym zarządzam za pomocą PyCharm, zakładam, że używa Pip do zainstalowania wszystkiego)

W poniższym kodzie mogę użyć określonej ścieżki dla geckodriver przy użyciu parametru ścieżka_wykonywalnej (odkryłem to, przeglądając plik Lib \ site-packages \ selenium \ webdriver \ firefox \ webdriver.py). Uwaga: podejrzewam, że kolejność argumentów parametrów podczas wywoływania webdriver jest ważna, dlatego ścieżka_wykonywalna jest ostatnia w moim kodzie (druga ostatnia linia po prawej stronie)

Możesz również zauważyć, że używam niestandardowego profilu firefox, aby obejść problem sec_error_unknown_issuer, na który napotkasz, jeśli testowana witryna ma niezaufany certyfikat. zobacz Jak wyłączyć ostrzeżenie o niezaufanym połączeniu Firefoksa za pomocą Selenium?

Po przeprowadzonym dochodzeniu ustalono, że sterownik Marionette jest niekompletny i wciąż trwa, i nie działało żadne ustawienie różnych możliwości ani opcji profilu dla odrzucania lub ustawiania certyfikatów. Łatwiej było więc użyć niestandardowego profilu.

W każdym razie oto kod, w jaki sposób zmusiłem gekodriver do pracy, nie będąc na ścieżce:

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')
Roochiedoor
źródło
Mam błąd SyntaxError: (błąd unicode) „Kodek unicodeescape” nie może dekodować bajtów ... I muszę zmienić ścieżkę gecko na epath = r'C: \ Users \ step_ \ Documents \ mtg_buyer \ geckodrivers \ geckodriver.exe '. Może powodem jest to, że używam chińskiego systemu Windows 10?
Endle_Zhenbo
3

Korzystam z systemu Windows 10 i działało to dla mnie:

  1. Pobierz geckodriver stąd . Pobierz odpowiednią wersję dla używanego komputera
  2. Rozpakuj właśnie pobrany plik i wytnij / skopiuj plik „.exe”, który on zawiera
  3. Przejdź do C: {twój folder główny python}. Mój był C: \ Python27. Wklej plik geckodriver.exe w tym folderze.
  4. Uruchom ponownie środowisko programistyczne.
  5. Spróbuj ponownie uruchomić kod, powinien już działać.
Edgar N.
źródło
Dziękujemy za wzmiankę o konieczności ponownego uruchomienia środowiska programistycznego.
Głębokie
3

Rozważ zainstalowanie kontenerowego Firefoksa:

docker pull selenium/standalone-firefox
docker run --rm -d -p 5555:4444 --shm-size=2g selenium/standalone-firefox

Połącz za pomocą webdriver.Remote:

driver = webdriver.Remote('http://localhost:5555/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://toolbox.googleapps.com/apps/browserinfo/')
driver.save_screenshot('info.png')
Max Malysh
źródło
2

Naprawdę jest to raczej smutne, że żadna z książek opublikowanych na Selenium / Python i większość komentarzy na ten temat za pośrednictwem Google nie wyjaśnia jasno logiki ścieżki do skonfigurowania tego na Macu (wszystko jest Windows !!!!). Wszystkie youtube są odbierane w „po” ustawieniu ścieżki (moim zdaniem tanie wyjście!). Tak więc, dla wspaniałych użytkowników komputerów Mac, skorzystaj z następujących opcji, aby edytować pliki ścieżki bash:

> $ touch ~ / .bash_profile; otwórz ~ / .bash_profile

Następnie dodaj ścieżkę mniej więcej taką ... * # Ustawienie PATH dla geckodriver PATH = „/ usr / bin / geckodriver: $ {PATH}” export PATH

Ustawienie ŚCIEŻKI dla firefox Selenium

PATH = „~ / Users / twoNamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / selenium / webdriver / firefox /: $ {PATH}” eksport ŚCIEŻKA

Ustawienie PATH dla pliku wykonywalnego w sterowniku Firefox

PATH = „/ Users / yournamePATH / VEnvPythonInterpreter / lib / python2.7 / site-packages / selenium / webdriver / common / service.py: $ {PATH}” eksport ŚCIEŻKA *

To zadziałało dla mnie. Martwię się, kiedy społeczność Selenium Windows zacznie grać w prawdziwą grę i włączy nas użytkowników komputerów Mac do aroganckiego członkostwa w klubie.

JustASteve
źródło
2

Selenium odpowiada na to pytanie w swoim 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.

Zasadniczo wystarczy pobrać geckodriver, rozpakować go i przenieść plik wykonywalny do folderu / usr / bin

Peter Graham
źródło
Ten cytat zawiera wskazówki, które działały na mięcie Linuksa 18.
Elliot Robert
2

Dla użytkowników systemu Windows

użyj oryginalnego kodu, ponieważ:

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

następnie pobierz sterownik z: mozilla / geckodriver

Umieść go na stałej ścieżce (na stałe) .. jako przykład wstawiłem:

C: \ Python35

Następnie przejdź do zmiennych środowiskowych systemu, w siatce „Zmienne systemowe” poszukaj Zmienna ścieżki i dodaj:

; C: \ Python35 \ geckodriver

geckodriver, nie geckodriver.exe .

Ghanem
źródło
geckodriver, nie geckodriver.exe.
Saurabh Chandra Patel
1

Na Raspberry Pi musiałem utworzyć ze sterownika ARM i ustawić ścieżkę geckodriver i log:

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"):
Nathan Gisvold
źródło
1

Jeśli używasz środowiska wirtualnego i win10 (być może dotyczy to innych systemów), wystarczy umieścić geckodriver.exe w następującym folderze w katalogu środowiska wirtualnego:

... \ my_virtual_env_directory \ Scripts \ geckodriver.exe

zwierzak
źródło
1
from webdriverdownloader import GeckoDriverDownloader # vs ChromeDriverDownloader vs OperaChromiumDriverDownloader
gdd = GeckoDriverDownloader()
gdd.download_and_install()
#gdd.download_and_install("v0.19.0")

dostaniesz ścieżkę do pliku gekodriver.exe w systemie Windows

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'C:\\Users\\username\\\bin\\geckodriver.exe')
driver.get('https://www.amazon.com/')
InLaw
źródło
0

Mac 10.12.1 python 2.7.10 to działa dla mnie :)

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
do01
źródło
0

Używam Windows 10 i Anaconda2. Próbowałem ustawić zmienną ścieżki systemowej, ale nie wyszło. Następnie po prostu dodałem plik geckodriver.exe do folderu Anaconda2 / Scripts i wszystko działa teraz świetnie. Dla mnie ścieżka była:

C: \ Users \ Bhavya \ Anaconda2 \ Scripts

Bhavya Ghai
źródło
0

Jeśli chcesz dodać ścieżki sterownika w systemie Windows 10:

  1. Kliknij prawym przyciskiem myszy ikonę „Ten komputer” i wybierz „Właściwości” wprowadź opis zdjęcia tutaj

  2. Kliknij „Zaawansowane ustawienia systemu”

  3. Kliknij „Zmienne środowiskowe” u dołu ekranu
  4. W sekcji „Zmienne użytkownika” zaznacz „Ścieżka” i kliknij „Edytuj”
  5. Dodaj ścieżki do zmiennych, klikając „Nowy” i wpisując ścieżkę dla dodawanego sterownika i naciskając klawisz Enter.
  6. Po wprowadzeniu ścieżki kliknij „OK”
  7. Klikaj przycisk „OK”, dopóki nie zamkniesz wszystkich ekranów
Russ Thomas
źródło
0
  1. upewnij się, że masz poprawną wersję sterownika (geckodriver), x86 lub 64.
  2. upewnij się, że sprawdzasz właściwe środowisko, na przykład zadanie działa w Dockerze, podczas gdy sprawdzane jest środowisko środowiskowe hosta
Wen
źródło
0

dla mnie wystarczyło zainstalować geckodriver w tym samym środowisku:

$ brew install geckodriver

a kod nie został zmieniony:

from selenium import webdriver
browser = webdriver.Firefox()
Olesya M.
źródło
0

Aby dodać moje 5 centów, można również zrobić echo PATH(Linux) i po prostu przenieść geckodriver do folderu, który ci się podoba. Jeśli folder systemowy (nie środowisko wirtualne) jest celem, sterownik staje się globalnie dostępny.

Aramakus
źródło