Uruchamianie powiązań Pythona Selenium WebDriver w przeglądarce Chrome

147

Podczas pracy z Selenium napotkałem problem. W moim projekcie muszę używać Chrome. Jednak nie mogę połączyć się z tą przeglądarką po uruchomieniu jej z Selenium.

Z jakiegoś powodu Selenium nie może samodzielnie znaleźć Chrome. Oto, co się dzieje, gdy próbuję uruchomić Chrome bez dołączania ścieżki:

Traceback (most recent call last):
  File "./obp_pb_get_csv.py", line 73, in <module>
    browser = webdriver.Chrome() # Get local session of chrome
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 46, in __init__
    self.service.start()
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/service.py", line 58, in start
    and read up at http://code.google.com/p/selenium/wiki/ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'ChromeDriver executable needs to be available in the path.                 Please download from http://code.google.com/p/selenium/downloads/list                and read up at http://code.google.com/p/selenium/wiki/ChromeDriver'

Aby rozwiązać ten problem, dołączyłem ścieżkę Chromium do kodu, który uruchamia Chrome. Jednak interpreterowi nie udaje się znaleźć gniazda do połączenia:

Traceback (most recent call last):
  File "./obp_pb_get_csv.py", line 73, in <module>
    browser = webdriver.Chrome('/usr/bin/chromium') # Get local session of chrome
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 46, in __init__
    self.service.start()
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/service.py", line 64, in start
    raise WebDriverException("Can not connect to the ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'Can not connect to the ChromeDriver'

Próbowałem też rozwiązać problem, uruchamiając chrome z:

chrom --remote-shell-port = 9222

Jednak to też nie zadziałało.

PS. Oto kilka informacji o moim systemie:

klient www: chrom 15.0.874.121  
dev-lang: python 2.7.2-r3 Selen 2.11.1  
System operacyjny: GNU / Linux Gentoo Kernel 3.1.0-gentoo-r1
Akendo
źródło
Chciałem tylko poinformować, że „--remote-shell-port” nie jest poprawną opcją wiersza poleceń. Zobacz: peter.sh/experiments/chromium-command-line-switches („--remote-debugging-port” byłoby poprawne. Należy pamiętać, że przed użyciem tej opcji należy zamknąć wszystkie instancje chromu. nowe okno w istniejącej sesji przeglądarki nie działa).
dpat

Odpowiedzi:

133

Musisz upewnić się, że samodzielny plik binarny ChromeDriver (inny niż plik binarny przeglądarki Chrome) znajduje się w Twojej ścieżce lub jest dostępny w zmiennej środowiskowej webdriver.chrome.driver.

Zobacz http://code.google.com/p/selenium/wiki/ChromeDriver, aby uzyskać pełne informacje na temat połączeń.

Edytować:

Racja, wydaje się, że jest to błąd w powiązaniach Pythona, który odczytuje plik binarny chromedriver ze ścieżki lub zmiennej środowiskowej. Wygląda na to, że jeśli chromedriver nie jest na twojej drodze, musisz przekazać go jako argument konstruktorowi.

import os
from selenium import webdriver

chromedriver = "/Users/adam/Downloads/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get("http://stackoverflow.com")
driver.quit()
Adam Goucher
źródło
Przepraszam, zapomniałem o tym wspomnieć. Mam ten link.
Akendo
2
Wypróbowałem Chromedriver zamiast Firefox Webdriver .. prawie 3-krotny wzrost wydajności ..
UberNeo
4
Ponadto, po prostu chcę wspomnieć, że argument przekazany do konstruktora jest ścieżką do ChromeDriver binarny i nie katalog zawierający plik binarny ChromeDriver (zmarnowane ostatnie pół godziny zastanawianie się, co się dzieje źle).
TheRookierLearner
107

W przypadku systemu Linux

  1. Sprawdź, czy masz zainstalowaną najnowszą wersję przeglądarki Chrome-> chromium-browser -version
  2. Jeśli nie, zainstaluj najnowszą wersję Chrome sudo apt-get install chromium-browser
  3. pobierz odpowiednią wersję sterownika chrome stąd
  4. Rozpakuj plik chromedriver.zip
  5. Przenieś plik do /usr/binkatalogusudo mv chromedriver /usr/bin
  6. Idź do /usr/binkatalogucd /usr/bin
  7. Teraz musisz uruchomić coś takiego, jak sudo chmod a+x chromedriveroznaczenie go jako wykonywalnego.
  8. wreszcie możesz wykonać kod.

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("http://www.google.com")
    print driver.page_source.encode('utf-8')
    driver.quit()
    display.stop()
Vicky
źródło
1
Bardzo dobrze! Jedna uwaga: udało mi się to uruchomić tylko z 32-bitowym sterownikiem chromedriver, chociaż używam 64-bitowego systemu Linux.
Imran,
W Ubuntu (14.04) możesz zainstalować pakiet chromium-chromdriver (np. Z apt-get) i dodać ścieżkę do pliku chromedriver do zmiennej powłoki PATH PATH = "$ {PATH}": / usr / lib / chromium-browser / Jeśli dodasz to do swojego .bashrc, nie będziesz musiał tego ustawiać za każdym razem, gdy będziesz chciał testować z selenem.
Arpad Horvath
1
w rzeczywistości ta odpowiedź powinna mieć znacznie więcej głosów pozytywnych. w zasadzie jest to droga dla każdego kierowcy, takiego jak geckodriver.
holzkohlengrill
Moja wersja przeglądarki Chrome jest wymieniona jako (Chromium 67.0.3396.99 Zbudowana na Ubuntu, działająca na Ubuntu 16.04), ale link ma tylko wersje 2.0-2.9. Potrzebuję pomocy.
Vaibhav Maheshwari
93

Tylko Mac OSX

Łatwiejszym sposobem na rozpoczęcie pracy (zakładając, że masz już zainstalowany homebrew , który, jeśli nie, powinieneś zrobić to najpierw i pozwolić homebrew poprawić swoje życie), to po prostu uruchomić następujące polecenie:

brew install chromedriver

To powinno postawić chromedriver na twojej drodze i wszystko powinno być gotowe.

Jachin
źródło
To nie może działać na Macu. selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
wyx
1
@wyx Twoje środowisko może być nieprawidłowo skonfigurowane. Spróbuj pobiec brew doctori zobacz, czy to coś znajdzie.
Jachin,
2
To jedna z tych ciepłych i rozmytych chwil, kiedy po prostu cieszysz się, że masz Maca. Tak łatwo.
Użytkownik
SERCE! I love brew
RHSMan
52

Dla Windowsa

Pobierz ChromeDriver z tego bezpośredniego linku LUB pobierz najnowszą wersję z tej strony .

Wklej chromedriver.exeplik do swojego C:\Python27\Scriptsfolderu.

To powinno działać teraz:

from selenium import webdriver
driver = webdriver.Chrome()
Abdul Majeed
źródło
23

W przypadku okien proszę chromedriver.exeumieścić pod<Install Dir>/Python27/Scripts/

user2253967
źródło
i gdzie umieścić ubuntu? int /usr/lib/czy gdzieś indziej?
Gaurav Jain
Posiadanie pliku PATHnie wystarczyło, umieszczenie go /Scripts/tam, gdzie ride.pyjest używany.
Qwerty
1

Istnieją 2 sposoby uruchamiania testów Pythona Selenium w przeglądarce Google Chrome. Rozważam Windows (w moim przypadku Windows 10):

Warunek wstępny: pobierz najnowszy sterownik Chrome ze strony: https://sites.google.com/a/chromium.org/chromedriver/downloads

Sposób 1:

i) Rozpakuj pobrany plik zip w wybranym katalogu / lokalizacji
ii) Ustaw ścieżkę do pliku wykonywalnego w kodzie, jak poniżej:

self.driver = webdriver.Chrome(executable_path='D:\Selenium_RiponAlWasim\Drivers\chromedriver_win32\chromedriver.exe')

Sposób 2:

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

self.driver = webdriver.Chrome()
Ripon Al Wasim
źródło
-1

W przypadku środowiska IDE systemu Windows:

Jeśli twoja ścieżka nie działa, możesz spróbować dodać chromedriver.exedo swojego projektu, tak jak w tej strukturze projektu.

chromedriver.exe

Następnie powinieneś załadować chromedriver.exew swoim głównym pliku. Jak dla mnie, załadował driver.exein driver.py.

def get_chrome_driver():
return webdriver.Chrome("..\\content\\engine\\chromedriver.exe",
                            chrome_options='--no-startup-window')

..oznacza driver.py'sgórny katalog

.oznacza katalog, w którym driver.pyznajduje się plik

Mam nadzieję, że to będzie pomocne.

tyrantqiao
źródło