Jestem nowy w programowaniu i zacząłem z Python
okoł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ę, geckodriver
ale nie jestem pewien, jak to zrobić, więc czy ktoś może mi powiedzieć, jak to zrobić?
brew install geckodriver
chromedriver
.Odpowiedzi:
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ć
geckodriver
plik wykonywalny z systemuPATH
. 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:
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: -
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: -
źródło
geckodriver.exe
wC:\Python\Python35\selenium
katalogu i ustawiłem ścieżkę tak, jak opisałeś, ale wyświetla mi się błąd poniżej:PATH
in unix. Możesz ustawić go w kodzie, ponieważ nie jest potrzebnyos.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
To rozwiązało dla mnie.
źródło
export PATH=$PATH:geckodriver
(wyodrębniono go na pulpicie). Ale to też nie pomogło. I jeszcze dostać OSError errno [8]to kroki ROZWIĄZANE dla mnie na Ubuntu Firefox 50.
Pobierz geckodriver
Skopiuj geckodriver do / usr / local / bin
NIE musisz dodawać
źródło
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
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.
źródło
W systemie macOS z zainstalowanym Homebrew możesz po prostu uruchomić polecenie Terminal
Ponieważ homebrew już rozszerzył
PATH
, nie trzeba modyfikować żadnych skryptów startowych.źródło
Aby skonfigurować geckodriver dla Selenium Python:
Musi ustawić ścieżkę geckodriver za pomocą FirefoxDriver jak poniżej:
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:
źródło
Jeśli używasz Anacondy , wszystko, co musisz zrobić, to aktywować środowisko wirtualne, a następnie zainstalować geckodriver za pomocą następującego polecenia :
źródło
Ubuntu 18.04+ i najnowsza wersja geckodriver
Powinno to również działać dla innych odmian * nix.
W przypadku aktualizacji systemu Mac do:
źródło
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
Teraz powyższy kod w pytaniu będzie działał z poniższą zmianą,
źródło
Najłatwiejszy sposób na Windows!
Pobierz najnowszą wersję
geckodriver
z tutaj . Dodaj plik geckodriver.exe do katalogu python (lub dowolnego innego katalogu, który już znajduje się w kataloguPATH
). To powinno rozwiązać problem (testowany w systemie Windows 10)źródło
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:
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_profile
pliku następujące linie :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_profile
i 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.
źródło
geckodriver
pomocą Homebrew:brew install geckodriver
a następnie uruchomić Firefoksa przez:driver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
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:
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
źródło
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:
źródło
Korzystam z systemu Windows 10 i działało to dla mnie:
źródło
Rozważ zainstalowanie kontenerowego Firefoksa:
Połącz za pomocą
webdriver.Remote
:źródło
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.
źródło
Selenium odpowiada na to pytanie w swoim DESCRIPTION.rst
Zasadniczo wystarczy pobrać geckodriver, rozpakować go i przenieść plik wykonywalny do folderu / usr / bin
źródło
użyj oryginalnego kodu, ponieważ:
następnie pobierz sterownik z: mozilla / geckodriver
Umieść go na stałej ścieżce (na stałe) .. jako przykład wstawiłem:
Następnie przejdź do zmiennych środowiskowych systemu, w siatce „Zmienne systemowe” poszukaj Zmienna ścieżki i dodaj:
geckodriver, nie geckodriver.exe .
źródło
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
źródło
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
źródło
dostaniesz ścieżkę do pliku gekodriver.exe w systemie Windows
źródło
Mac 10.12.1 python 2.7.10 to działa dla mnie :)
źródło
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
źródło
Jeśli chcesz dodać ścieżki sterownika w systemie Windows 10:
Kliknij prawym przyciskiem myszy ikonę „Ten komputer” i wybierz „Właściwości”
Kliknij „Zaawansowane ustawienia systemu”
źródło
Odwiedź Gecko Driver pobierz adres URL sterownika gecko z sekcji Pliki do pobrania.
Sklonuj to repozytorium https://github.com/jackton1/script_install.git
cd script_install
Biegać
źródło
źródło
dla mnie wystarczyło zainstalować geckodriver w tym samym środowisku:
a kod nie został zmieniony:
źródło
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.źródło