Komunikat o błędzie: „Plik wykonywalny„ chromedriver ”musi być dostępny w ścieżce”

171

Używam selenu w Pythonie i pobrałem sterownik chromedriver dla mojego komputera z systemem Windows z tej witryny: http://chromedriver.storage.googleapis.com/index.html?path=2.15/

Po pobraniu pliku zip rozpakowałem plik zip do mojego folderu pobierania. Następnie umieszczam ścieżkę do pliku wykonywalnego binarnego (C: \ Users \ michael \ Downloads \ chromedriver_win32) w zmiennej środowiskowej „Ścieżka”.

Jednak gdy uruchamiam następujący kod:

  from selenium import webdriver

  driver = webdriver.Chrome()

... ciągle otrzymuję następujący komunikat o błędzie:

WebDriverException: Message: 'chromedriver' executable needs to be available in the path. Please look at     http://docs.seleniumhq.org/download/#thirdPartyDrivers and read up at http://code.google.com/p/selenium/wiki/ChromeDriver

Ale - jak wyjaśniono powyżej - plik wykonywalny znajduje się (!) W ścieżce ... co tu się dzieje?

steady_progress
źródło
19
Spróbuj skopiować plik chromedriver.exew tym samym katalogu, co skrypt w Pythonie.
Malik Brahimi
4
Instalacja poprzez Chocolatey doda go do ścieżki choco install chromedriver.
WhatIsHeDoing
ponieważ użytkownik napotkał ten problem w pycharm, ponowne uruchomienie go rozwiąże
Charles Chow
Zgadzam się z odpowiedzią ImNt. Chociaż chciałbym dodać, że dla tych, którzy używają virtualenv, powinieneś uruchomić Pythona w swoim pliku venv jako Administrator, używając następującego przykładowego formatu: driver = webdriver.Chrome (r'C: / Users / michael / Downloads / chromedriver_win32 /chromedriver.exe ')
Pineda,
@MalikBrahimi Szukałem tego rozwiązania wszędzie i żadne z nich nie działało, dopóki nie znalazłem twojego komentarza.
Wielkie

Odpowiedzi:

178

Możesz sprawdzić, czy rzeczywiście znajduje się w PATH, jeśli otworzysz cmd i wpiszesz chromedriver(zakładając, że plik wykonywalny chromedriver nadal ma taką nazwę) i naciśnij Enter. Jeśli Starting ChromeDriver 2.15.322448się pojawia, oznacza to, że PATH jest odpowiednio ustawiona i coś innego jest nie tak.

Alternatywnie możesz użyć bezpośredniej ścieżki do chromowanego sterownika w następujący sposób:

 driver = webdriver.Chrome('/path/to/chromedriver') 

Więc w twoim konkretnym przypadku:

 driver = webdriver.Chrome("C:/Users/michael/Downloads/chromedriver_win32/chromedriver.exe")
lmNt
źródło
3
Dziękujemy za odpowiedź: pojawił się komunikat „Uruchamianie ChromeDriver 2.15.322448”. „Dozwolone są tylko połączenia lokalne”. pojawił się również. ... Ale myślę, że to jest w porządku? .... Jedną rzeczą, nad którą się zastanawiałem, było to: na stronie była dostępna tylko 32-bitowa wersja chromedrivera ... ale to powinno działać dobrze z moimi 64-bitowymi oknami, prawda?
steady_progress
@steady_progress Tak, jest ok. I to zadziała z 64-bitowym systemem Windows; Sam go używam. Podejrzewam, że może to wersja selenowa? Który masz zainstalowany? Czy zainstalowałeś go używając pip?
lmNt
Czy próbowałeś użyć bezpośredniej ścieżki do sterownika podczas wywoływania webdrivera, jak wspomniałem w odpowiedzi? Czy nie powiodło się z tym samym błędem?
lmNt
4
Dodając sterowniki sieciowe do ścieżki PATH, bez względu na system operacyjny, dołącz tylko katalog, w którym jest przechowywany sterownik sieciowy, a nie plik wykonywalny. Przykład: PATH = $ PATH: / path / to / webdriver / folder, a nie PATH = $ PATH: / path / to / webdriver / chromedriver. Ponadto użycie PATH jest znacznie bardziej przenośne niż przekazywanie lokalizacji do wywołania webdriver.Chrome (), ponieważ zawsze możemy założyć, że PATH jest poprawnie ustawiony niezależnie od tego, gdzie jest uruchamiany kod, ale nie możemy założyć, że struktura ich plików jest identyczna .
Mszyca
2
próbował użyć tego samego rozwiązania, ale pojawia się ten błąd: WebDriverException: Komunikat: Plik wykonywalny „chromedriver.exe” może mieć nieprawidłowe uprawnienia. Proszę wejść na sites.google.com/a/chromium.org/chromedriver/home
Yogesh
151

Widzę, że dyskusje wciąż mówią o starym sposobie konfigurowania chromedriver, pobierając plik binarny i ręcznie konfigurując ścieżkę.

Można to zrobić automatycznie za pomocą menedżera webdriver

pip install webdriver-manager

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

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install())

To samo można wykorzystać do ustawienia Firefoksa, Edge'a i np. Plików binarnych.

Navarasu
źródło
@Navarasu z całym szacunkiem, dlaczego ktoś miałby śledzić coś z 3.6, gdy prąd wynosi 3.7. Następnym razem byłoby miło wyraźnie powiedzieć, że to 3.6 .... Dzięki
Azy Sır
5
to jest niesamowite, ponieważ również pozostaje na bieżąco
Leslie Alldridge
1
Zaletą tego rozwiązania jest to, że ma większą elastyczność niż inne rozwiązania oparte na określonej konfiguracji ścieżki, co uważam za niepraktyczne z punktu widzenia używania skryptu na wielu komputerach.
IBRAHIM
14

Ta sama sytuacja z edycją społeczności pycharm, więc tak jak w przypadku cmd, musisz zrestartować ide, aby przeładować zmienne ścieżek. Zrestartuj swój ide i powinno być dobrze.

Andrea Bisello
źródło
2
Dzięki. Miałem ten sam problem w Visual Studios. Właśnie zrestartowałem IDE i zadziałało :) Dzięki
DollarAkshay
U mnie też zadziałało.
CARTOS
13

W systemie Linux (Ubuntu lub Debian):

sudo apt install chromium-chromedriver

W systemie macOS zainstaluj https://brew.sh/, a następnie zrób

brew cask install chromedriver
Boris
źródło
Następnie użyj: driver = webdriver.Chrome ('/ usr / lib / chromium-browser / chromedriver') .. bez zmiany $ PATH
alchemia
@alchemia czy na pewno musisz to zrobić? O ile pamiętam, driver = webdriver.Chrome()działało dobrze dla mnie.
Boris
Cześć Boris, tak, nie wiem dlaczego ... nawet po dodaniu do PATH to nie działało bez tego. Jestem pewien, że poprawne ustawienie ścieżki byłoby lepsze, ale muszę szybko zrobić jedną rzecz z Chromedriverem
alchemia
9

Musimy dodać ciąg ścieżki, zaczynając od litery rprzed łańcuchem, dla nieprzetworzonego łańcucha. Testowałem w ten sposób i działa.

driver = webdriver.Chrome(r"C:/Users/michael/Downloads/chromedriver_win32/chromedriver.exe")
James0007
źródło
3

Dodatkowe informacje / wyjaśnienia dla przyszłych czytelników tego wątku, aby uniknąć majstrowania przy PATH env. zmienna na poziomie Windows i zrestartuj system Windows: (kopia mojej odpowiedzi z https://stackoverflow.com/a/49851498/9083077, jeśli dotyczy Chrome):

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

(2) Przykład kodu w Pythonie:

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

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

Uwagi: (1) Może minąć około 5 sekund, zanim przykładowy kod (w podanej odpowiedzi) otworzy przeglądarkę Firefox dla podanego adresu URL. (2) Konsola Pythona wyświetli następujący błąd, jeśli żaden serwer już nie działa pod podanym adresem URL lub nie obsługuje strony o tytule zawierającym ciąg „Django”: assert „Django” w przeglądarce.title AssertionError

Snidhi Sofpro
źródło
3

Dla systemu Linux i OSX

Krok 1: Pobierz chromedriver

# You can find more recent/older versions at http://chromedriver.storage.googleapis.com/
# Also make sure to pick the right driver, based on your Operating System
wget http://chromedriver.storage.googleapis.com/81.0.4044.69/chromedriver_mac64.zip

Krok 2: Dodaj chromedriver do /usr/local/bin

unzip chromedriver_mac64.zip
cp chromedriver /usr/local/bin

Teraz powinieneś móc biec

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('http://localhost:8000')

bez żadnych problemów

Giorgos Myrianthous
źródło
Wyraźnie powiedziano, że używa Windowsa, to jest dla Linuksa.
misantroop
1
@misantroop Zaktualizowałem moją odpowiedź, aby była jasna.
Giorgos Myrianthous
2

Po rozpakowaniu chromedriver proszę podać dokładną lokalizację, aby można było ją później prześledzić. Poniżej otrzymujesz właściwy chromedriver dla swojego systemu operacyjnego, a następnie rozpakowujesz go do dokładnej lokalizacji, która może zostać podana jako argument później w kodzie.

wget http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux64.zip unzip chromedriver_linux64.zip -d /home/virtualenv/python2.7.9/

Harshdeep Singh
źródło
3
Lub /usr/local/bin/zainstalować na całym świecie.
Jeppe,
2

Jeśli pracujesz z robotem RIDE. Następnie możesz pobrać Chromedriver.exez jego oficjalnej strony internetowej i zachować ten plik .exe w C:\Python27\Scriptskatalogu. Teraz wspomnij tę ścieżkę jako zmienną środowiskową, np. C:\Python27\Scripts\chromedriver.exe.

Uruchom ponownie komputer i ponownie uruchom ten sam przypadek testowy. Nie będziesz miał więcej tego problemu.

Rahul Tiwari
źródło
2

Zgodnie z instrukcją podczas tworzenia instancji webdrivera należy dołączyć ścieżkę do ChromeDriver.

driver = webdriver.Chrome('/path/to/chromedriver')
AnnaSummerShine
źródło
Jeśli przewiniesz te instrukcje w prawo, pojawi się komentarz „Opcjonalny argument, jeśli nie zostanie określony, spowoduje przeszukanie ścieżki”. Ale przynajmniej niektóre wersje webdrivera wydają się sprawdzać każdy chromedriver, który znajdą w ścieżce i jeśli nie jest z nim „zadowolony” (zła wersja itp.), Nie będzie go używać (chyba że i tak zostanie zmuszony do spróbowania przez ustawienie tego parametru). Będzie szukał ścieżki do lepszej wersji, a następnie będzie narzekał, jeśli nie może jej znaleźć. („Nie znaleziono odpowiedniego sterownika chromowanego” byłoby lepszą wiadomością niż „nie znaleziono sterownika chromowanego”).
Silas S. Brown
2

Zanim dodasz chromedriver do swojej ścieżki, upewnij się, że jest to ta sama wersja co Twoja przeglądarka.

Jeśli nie, musisz dopasować wersje: albo zaktualizuj / obniż wersję Chrome, a następnie zaktualizuj / obniż wersję swojego webdrivera.

Zalecam aktualizację Twojej wersji Chrome tak bardzo, jak to możliwe, i dopasowanie webdrivera.

Aby zaktualizować Chrome:

  • W prawym górnym rogu kliknij trzy kropki.
  • kliknij help->About Google Chrome
  • zaktualizuj wersję i uruchom ponownie chrome

Następnie pobierz kompatybilną wersję stąd: http://chromedriver.chromium.org/downloads .

Uwaga: najnowszy chromedriver nie zawsze pasuje do najnowszej wersji chrome!

Teraz możesz dodać go do PATH:

  1. utwórz nowy folder gdzieś na swoim komputerze, w którym umieścisz sterowniki sieciowe. Utworzyłem folder o nazwie webdriverswC:\Program Files

  2. skopiuj ścieżkę do folderu. W moim przypadku tak byłoC:\Program Files\webdrivers

  3. kliknij prawym przyciskiem myszy this PC-> properties:

wprowadź opis obrazu tutaj

  1. Kliknij prawym przyciskiem myszy Advanced System settings
  2. Kliknij Environment Variables
  3. W System variables, kliknij pathi kliknijedit
  4. Kliknij new
  5. wklej skopiowaną wcześniej ścieżkę
  6. kliknij OK we wszystkich oknach

Otóż ​​to! Użyłem pycharm i musiałem go ponownie otworzyć. Może to samo z innymi IDE lub terminalami.

Alon Gouldman
źródło
1

Można spróbować ponownie uruchomić komputer, jeśli nie działa, po upewnieniu się, że PATH jest ustawiony poprawnie.

W moim przypadku w systemie Windows 7 zawsze otrzymywałem błąd na WebDriverException: Message: for chromedriver, gecodriver, IEDriverServer. Jestem prawie pewien, że mam właściwą ścieżkę. Uruchom ponownie komputer, wszystko działa

learningBunny
źródło
1

Najlepszy sposób na pewno jest tutaj:

Pobierz i rozpakuj chromedriver i umieść „chromedriver.exe” w C: \ Python27 \ Scripts, a wtedy nie musisz podawać ścieżki sterownika, po prostu

driver= webdriver.Chrome()

Skończyłeś, nie musisz dodawać ścieżek ani niczego

nirupam kapoor
źródło
0

W moim przypadku ten błąd znika po skopiowaniu pliku chromedriver do folderu c: \ Windows. Dzieje się tak, ponieważ katalog systemu Windows znajduje się w ścieżce, którą skrypt Pythona sprawdza pod kątem dostępności chromedriver.

Hamid
źródło
0

Jeśli używasz zdalnego interpretera, musisz również sprawdzić, czy zdefiniowano jego wykonywalną ścieżkę PATH. W moim przypadku przejście ze zdalnego interpretera Dockera na interpretera lokalnego rozwiązało problem.

Rafał
źródło
0

Napotkałem ten sam problem, co twój. Używam PyCharm do pisania programów i myślę, że problem leży w konfiguracji środowiska w PyCharm, a nie w systemie operacyjnym. Rozwiązałem problem, przechodząc do konfiguracji skryptu, a następnie ręcznie edytując PATH w zmiennych środowiskowych. Mamy nadzieję, że okaże się to pomocne!

sia1998
źródło
inną opcją jest przeniesienie twojego chromedrivera bezpośrednio do / usr / local / bin, wtedy nie będziesz się przejmować dodawaniem ścieżki
sia1998
0

Dodaj webdriver (chromedriver.exe lub geckodriver.exe) tutaj C: \ Windows . To zadziałało w moim przypadku

Suguresh Soppimath
źródło
0

Najlepszym sposobem może być pobranie bieżącego katalogu i dodanie do niego pozostałego adresu. Jak ten kod (Word w systemie Windows. W Linuksie możesz użyć czegoś z linii pwd): webdriveraddress = str(os.popen("cd").read().replace("\n", ''))+'\path\to\webdriver'


źródło
0

Kiedy pobrałem plik chromedriver.exe, po prostu przenoszę go do folderu PATH C: \ Windows \ System32 \ chromedriver.exe i miałem dokładnie ten sam problem.

Dla mnie rozwiązaniem była po prostu zmiana folderu w PATH, więc po prostu przeniosłem go do folderu Pycharm Community bin, który również był w PATH. dawny:

  • C: \ Windows \ System32 \ chromedriver.exe -> Dał mi wyjątek
  • C: \ Program Files \ JetBrains \ PyCharm Community Edition 2019.1.3 \ bin \ chromedriver.exe -> działało dobrze
Denis Imamovic
źródło
0

Miałem problem z komputerem Mac Mojave z uruchomionym środowiskiem testowym robota i przeglądarką Chrome 77. To rozwiązało problem. Kudos @Navarasu za wskazanie mi właściwej ścieżki.

$ pip install webdriver-manager --user # install webdriver-manager lib for python
$ python # open python prompt

Następnie w zachęcie Pythona:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())

# ctrl+d to exit

Prowadzi to do następującego błędu:

Checking for mac64 chromedriver:xx.x.xxxx.xx in cache
There is no cached driver. Downloading new one...
Trying to download new driver from http://chromedriver.storage.googleapis.com/xx.x.xxxx.xx/chromedriver_mac64.zip
...
TypeError: makedirs() got an unexpected keyword argument 'exist_ok'
  • Mam teraz najnowszy link do pobrania
    • Pobierz i rozpakuj chromedriver tam, gdzie chcesz
    • Na przykład: ~/chromedriver/chromedriver

Otwórz ~/.bash_profilew edytorze i dodaj:

export PATH="$HOME/chromedriver:$PATH"

Otwórz nowe okno terminala, ta-da 🎉

sampoh
źródło
0

Miałem ten problem na Webdriver 3.8.0 (Chrome 73.0.3683.103 i ChromeDriver 73.0.3683.68). Po tym, jak to zrobiłem, problem zniknął

pip install -U selenium

aby zaktualizować Webdriver do wersji 3.14.1.

Silas S. Brown
źródło
0

Sprawdź ścieżkę sterownika Chrome, może go stąd nie dostać. Po prostu skopiuj, wklej lokalizację sterownika do kodu.

ChandyShot
źródło
-3

(dla użytkowników komputerów Mac) Mam ten sam problem, ale rozwiązałem go w ten prosty sposób: Musisz umieścić swój chromedriver.exe w tym samym folderze z wykonywanym skryptem, a następnie w pyhton napisz tę instrukcję:

import os

os.environ ["PATH"] + = os.pathsep + r'X: / twój / folder / skrypt / '

walid_data
źródło
2
Rozwiązanie, które proponujesz, jest dokładnie takie samo, jak w przypadku innego użytkownika. Przed wysłaniem zwróć uwagę na inne odpowiedzi.
Nikita Kniazev
Czy @walid_data nie mówi tego, aby wskazać, że może to być problem tylko z systemem Windows?
benc