Bieganie selenu bez głowy z Chrome

Bieganie selenu bez głowy z Chrome
Jeśli chcesz wykonać automatyzację sieci selenium lub złomowanie sieci za pomocą Chrome Web Browser, domyślnie uruchamia wersję graficzną chromowanej przeglądarki internetowej. Nie stanowi to problemu, gdy uruchamiasz skrypt selenium ze środowiska graficznego Linux (i.mi., Gnome 3, KDE, XFCE4). Ale jeśli chcesz uruchomić swój skrypt selenowy w bezgłowym środowisku (ja.mi., Ubuntu Server, Centos/Rhel Server), w którym nie masz zainstalowanego żadnego graficznego środowiska stacjonarnego, to nie zadziała.

Na szczęście możesz skonfigurować selen do uruchamiania przeglądarki internetowej Chrome w trybie bezgłowym. W tym trybie przeglądarka internetowa Chrome będzie działać bez żadnego graficznego interfejsu użytkownika. Tak więc Selen może wykonywać automatyzację sieci, złomowanie sieci, testy przeglądarki itp. Korzystanie z chromowanej przeglądarki internetowej na serwerach Linux, w których nie masz zainstalowanego żadnego graficznego środowiska stacjonarnego.

W tym artykule pokażę ci, jak uruchomić selen z przeglądarką internetową Chrome w trybie bezgłowym. Użyję biblioteki Selenium Python i napiszę skrypty selenowe za pomocą języka programowania Python 3. Więc zacznijmy.

Wymagania wstępne:

Aby wypróbować polecenia i przykłady z tego artykułu, musisz mieć,

1) Dystrybucja Linux (najlepiej Ubuntu) zainstalowana na komputerze.
2) Python 3 zainstalowany na komputerze.
3) PIP 3 zainstalowany na komputerze.
4) Google Chrome zainstalowany na komputerze.

Można znaleźć wiele artykułów na te tematy na Linuxhint.com. Pamiętaj, aby je sprawdzić, jeśli potrzebujesz pomocy.

Przygotowanie wirtualnego środowiska Python 3 do projektu:

Wirtualne środowisko Python służy do stworzenia izolowanego katalogu projektu Python. Moduły Python, które instalowane za pomocą PIP zostaną zainstalowane tylko w katalogu projektu, a nie na całym świecie.

Pyton Virtualenv Moduł służy do zarządzania wirtualnymi środowiskami Python.

Możesz zainstalować Python Virtualenv moduł globalnie za pomocą PIP 3 w następujący sposób:

$ sudo pip3 instaluj Virtualenv

Pyton Virtualenv należy zainstalować.

Utwórz katalog projektu bezbłędny W obecnym katalogu roboczym w następujący sposób:

$ mkdir -pv chrome -headless/sterowniki

Przejdź do nowo utworzonego katalogu projektu bezbłędny następująco:

$ CD Chrome-Headless /

Utwórz wirtualne środowisko Python w katalogu projektu za pomocą następującego polecenia:

$ Virtualenv .Venv

Wirtualne środowisko Pythona powinno być tworzone w .venv/ katalog w katalogu projektu.

Aktywuj wirtualne środowisko Python swojego katalogu projektu za pomocą następującego polecenia:

$ źródło .venv/bin/aktywuj

Instalowanie biblioteki Selenium Python:

Biblioteka selenium jest dostępna w oficjalnym repozytorium Python PyPi.

Możesz zainstalować bibliotekę Selenium Python za pomocą PIP 3 w następujący sposób:

$ PIP3 instaluj selen

Należy zainstalować bibliotekę Selenium Python.

Instalowanie Chrome Web Sterownik:

Chrome Web Sterownik pozwoli ci kontrolować lub zautomatyzować przeglądarkę internetową Google Chrome z Selenium.

W tej sekcji pokażę, jak zainstalować Chrome Web Sterownik.

Najpierw otwórz Google Chrome i odwiedź Chrome: // Ustawienia/pomoc.

Po załadowaniu strony należy znaleźć numer wersji Google Chrome w O Chrome Sekcja. Zwróć uwagę na pierwsze 3 sekcje numeru wersji oznaczone poniżej zrzutu ekranu.

Aby pobrać sterownik internetowy Chrome, odwiedź oficjalną stronę pobierania sterownika Chrome.

w Aktualne wydania Sekcja, Chrome Web Sterownik dla najbardziej aktualnych wydań przeglądarki internetowej Google Chrome powinien być dostępny, jak widać na zrzucie ekranu poniżej. Jeden z obecnych komunikatów sterowników Chrome powinien mieć pasujący numer wersji z przeglądarką internetową Google Chrome. Pierwsze 3 sekcje numeru wersji Chrome Web Sterownik i przeglądarki internetowej Google Chrome muszą pasować.

Jeśli wersja, której szukasz Aktualne wydania sekcja, przewiń trochę w dół i powinieneś być w stanie go znaleźć.

Po kliknięciu numeru wersji Chrome Web Sterownik powinien przejść do jego strony pobierania. Kliknij na Chromedriver_linux64.zamek błyskawiczny plik stąd.

Należy pobrać archiwum sterownika internetowego Chrome.

Pobrane Chromedriver_linux64.zamek błyskawiczny Plik powinien znajdować się w Twoim ~/Pobieranie informator.

$ ls -lh ~/pobieranie

Wyodrębnij Chromedriver_linux64.zamek błyskawiczny archiwum z ~/Pobieranie katalog do kierowcy/ Katalog twojego projektu w następujący sposób:

$ Unzip ~/Downloads/Chromedriver_linux64.sterowniki zip -d/

Nowy plik chromedriver powinien być utworzony w kierowcy/ katalog twojego projektu po wyodrębnianiu archiwum chromu sterownika internetowego, jak widać na zrzucie ekranu poniżej.

Testowanie Chrome Web Sterownik w trybie bezgłowym:

W tej sekcji pokażę Ci, jak uruchomić selen za pomocą Chrome Driver w trybie bezgłowym.

Najpierw stwórz nowy skrypt Python Ex01.py w katalogu projektu i wpisz w poniższych wierszach kodów.

od selenu importu Webdriver
z selenu.Webdriver.wspólny.Klucze importują klucze
z selenu.Webdriver.chrom.Opcje importu opcje
ChromeOptions = Options ()
Chromeopcje.bezgłowy = prawda
Browser = WebDriver.Chrome (Exceutable_path = "./sterowniki/chromedriver ", opcje = Chromeoptions)
przeglądarka.Get ("http: // Linuxhint.com ”)
Drukuj („Tytuł: % s” % przeglądarka.tytuł)
przeglądarka.zrezygnować()

Po zakończeniu zapisz Ex01.py Skrypt Pythona.

Te linie importują wszystkie wymagane rzeczy z selen biblioteka.

Jak powiedziałem wcześniej, domyślnie Chrome Driver próbuje uruchomić Google Chrome w trybie graficznym. Aby uruchomić Google Chrome w trybie bezgłowym, musimy powiedzieć Chrome Driver, aby przekazał dodatkowe opcje. Ta linia tworzy Opcje obiekt, który później możemy przekazać do sterownika internetowego Chrome.

Możesz uruchomić Google Chrome w trybie bezgłowym, po prostu ustawiając bezgłowy własność Chromeopcje oponować PRAWDA.

Lub możesz użyć add_argument () Metoda Chromeopcje obiekt, aby dodać -bezgłowy Argument wiersza polecenia do uruchomienia Google Chrome w trybie bezgłowym za pomocą sterownika internetowego Selenium Chrome.

Możesz użyć Webdriver.Chrom() Metoda inicjalizacji/uruchamiania przeglądarki internetowej Google Chrome z Selenu. Exceutable_path Argument służy do informowania Selenu, aby użył chromedriver binarny z kierowcy/ Katalog projektu. opcje Argument mówi Selenium, aby korzystał z naszych niestandardowych opcji Chromeopcje.

Gdy selen uruchomi przeglądarkę internetową Google Chrome za pomocą sterownika internetowego Selenium Chrome, zwraca przeglądarka obiekt. Możemy go użyć do kontrolowania instancji Google Chrome później.

przeglądarka.Dostawać() Metoda ładuje Linuxhint.com Witryna w przeglądarce internetowej Google Chrome w tle (w trybie bezgłowym).

Gdy strona się załaduje, przeglądarka.tytuł Własność będzie miała tytuł strony internetowej. Python wydrukować() Metoda drukuje tytuł strony internetowej na konsoli.

A później przeglądarka.zrezygnować() Metoda zamyka przeglądarkę internetową Google Chrome.

Aby sprawdzić, czy selen może działać w trybie bezgłowym, uruchom skrypt Python Ex01.py następująco:

$ Python3 Ex01.py

Powinien wydrukować tytuł strony na konsoli bez otwierania przeglądarki internetowej Google Chrome w trybie graficznym.

Aby pokazać, że działa z serwerów Linux bezgłowych (gdzie nie jest zainstalowany graficzny interfejs użytkownika), uruchomiłem skrypt Python Ex01.py na serwerze Ubuntu 20.04 LTS. Jak widać, skrypt działa dobrze.

Skrobanie internetowe za pomocą selenu w trybie bezgłowym za pomocą Chrome Web Driver:

W tej sekcji pokażę ci przykład złomowania sieci w selenium za pomocą Chrome Web Driver w trybie bezgłowym.

Najpierw odwiedź losowo-nazwy generatora.informacje z Google Chrome lub dowolnej innej przeglądarki internetowej. Ta strona będzie generować 10 losowych nazw za każdym razem, gdy ponownie załadujesz stronę, jak widać na zrzucie ekranu poniżej. Naszym celem jest wyodrębnienie tych losowych nazw przy użyciu selenu w trybie bezgłowym.

Aby znaleźć strukturę HTML listy, musisz otworzyć Narzędzie do programisty Chrome. Aby to zrobić, naciśnij odpowiedni przycisk myszy (RMB) na stronie i kliknij Sprawdzać lub naciśnij + + I.

Narzędzie do programisty Chrome należy otworzyć. Kliknij na Sprawdź ikonę () jak zaznaczono na zrzucie ekranu poniżej.

Następnie unosisz się nad listą Losowe nazwy. Lista powinna być wyróżniona jako oznaczona na zrzucie ekranu poniżej. Następnie naciśnij lewy przycisk myszy (LMB), aby wybrać listę.

Kod HTML z listy powinien zostać wyróżniony w Elementy zakładka Narzędzie do programisty Chrome. Tutaj lista losowych nazw znajduje się wewnątrz div element. div element ma klasa nazwa wyniki. Wewnątrz mamy ol element z klasa nazwa Lista imion. W środku ol element, każda z nazwisk jest w Li element.

Z tego możemy powiedzieć, aby dostać się do Li tagi, musimy śledzić div.Wyniki> ol.Namelista> Li

Tak więc nasz selektor CSS będzie div.Wyniki ol.Namelista Li (Wystarczy wymienić > Znaki z Whitespace)

Aby wyodrębnić te losowe nazwy, utwórz nowy skrypt Python Ex02.py i wpisz w poniższych wierszach kodów.

od selenu importu Webdriver
z selenu.Webdriver.wspólny.Klucze importują klucze
z selenu.Webdriver.chrom.Opcje importu opcje
ChromeOptions = Options ()
Chromeopcje.bezgłowy = prawda
Browser = WebDriver.Chrome (Exceutable_path = "./sterowniki/chromedriver ", opcje = Chromeoptions)
przeglądarka.GET ("http: // losowo-nazwa generator.Informacje/")
Namelist = przeglądarka.find_elements_by_css_selector ('div.Wyniki ol.Namelista Li ')
dla nazwy w nazwie:
Nazwa wydruku.tekst)
przeglądarka.zrezygnować()

Po zakończeniu zapisz Ex02.py Skrypt Pythona.

Wyjaśniłem wiersze 1-8 we wcześniejszej sekcji tego artykułu. Są to takie same jak w Ex01.py.

Wiersz 10 ładuje witrynę generatora losowych nazw za pomocą przeglądarka.Dostawać() metoda.

Wiersz 11 wybiera listę nazw za pomocą przeglądarka.find_elements_by_css_selector () metoda. Ta metoda wykorzystuje selektor CSS div.Wyniki ol.Namelista Li Aby znaleźć listę nazwisk. Następnie lista nazw jest przechowywana w Lista imion zmienny.

W wierszach 13 i 14, a Do pętla służy do iteracji przez Lista imion Lista Li elementy. W każdej iteracji treść Li element jest wydrukowany na konsoli.

Teraz uruchom skrypt Python Ex02.py następująco:

$ Python3 Ex02.py

Jak widać, skrypt Python Ex02.py Pobierz wszystkie losowe nazwy ze strony internetowej.

Jeśli uruchomisz skrypt po raz drugi, powinien zwrócić nową listę losowych nazw, jak widać na zrzucie ekranu poniżej.

Problemy możesz stawić czoła bieganiu selenium w trybie bezgłowym:

Widziałeś wcześniej, że uruchamianie selenu w trybie bezgłowym za pomocą chromowanego sterownika jest tak proste, jak ustawienie Chromeopcje.bezgłowy flaga do PRAWDA.

To rozwiązanie może nie działać dla niektórych dystrybucji Linux. W tej sekcji zamierzam porozmawiać o niektórych problemach, które możesz napotkać podczas uruchamiania selenu w trybie bezgłowym za pomocą Chrome Web Driver.

Domyślnie przeglądarka internetowa Google Chrome wykonuje dużo piaskownicy (uruchamia wiele rzeczy w izolowanym środowisku). Może to powodować problemy podczas uruchamiania selenu w trybie bezgłowym za pomocą Chrome Web Sterownik. Możesz wyłączyć piaskownicę dla Google Chrome za pomocą -Bez sandbox flaga.

Aby dodać -Bez sandbox flaga, dodaj następujący wiersz przed zainicjowaniem sterownika Chrome Selenu za pomocą Webdriver.Chrom() metoda (Linia 8 W Ex01.py Skrypt Python).

Chromeopcje.add_argument („-bez sandbox”)

Możesz mieć problemy z robieniem niektórych rzeczy w przeglądarce internetowej Google Chrome z Selenu, takie jak robienie zrzutów ekranu witryny i tak dalej. Może się to zdarzyć, ponieważ w trybie bezgłowym Google Chrome może ustawić nieprawidłową rozdzielczość wirtualnego ekranu. Twoja strona może nie wyglądać dobrze. Możesz ustawić żądaną wirtualną rozdzielczość ekranu dla Google Chrome Web Browser w trybie bezgłowym za pomocą -rozmiar okna Opcja wiersza polecenia.

Na przykład, aby ustawić wirtualną szerokość ekranu na 1280 PX i wysokość 720 px, Dodaj -rozmiar okna Opcja wiersza poleceń przed zainicjowaniem sterownika Chrome Selenium za pomocą Webdriver.Chrom() metoda (Linia 8 W Ex01.py Skrypt Python) w następujący sposób:

Chromeopcje.add_argument ("-okno-size = 1280,720")

Twój serwer może nie mieć zainstalowanego procesora graficznego lub może mieć procesor graficzny, którego przeglądarka internetowa Google Chrome nie będzie wiedziała, jak korzystać. Domyślnie Google Chrome powinien automatycznie wyłączyć przyspieszenie GPU, jeśli procesor graficzny nie jest dostępny lub jeśli dostępny jest nieobsługiwany procesor graficzny. W niektórych przypadkach może tego nie zrobić. W takim przypadku Selenium może nie być w stanie uruchomić przeglądarki Google Chrome Web w trybie bezgłowym. Aby rozwiązać ten problem, musisz wyłączyć przyspieszenie GPU za pomocą -Wyłącz GPU flaga.

Aby dodać -Wyłącz GPU flaga, dodaj następujący wiersz przed zainicjowaniem sterownika Chrome Selenu za pomocą Webdriver.Chrom() metoda (Linia 8 W Ex01.py Skrypt Python).

Chromeopcje.add_argument („-Disable-GPU”)

Wniosek:

W tym artykule pokazałem, jak skonfigurować selen w trybie bezgłowym za pomocą Chrome Web Driver. Omówiłem podstawy, które pomogą Ci zacząć od automatyzacji przeglądarki selenium, testowaniem internetowym i skrobaniem internetowym.

Omówiłem również niektóre argumenty/flagi wiersza poleceń Google Chrome, których możesz użyć do rozwiązania niektórych problemów, które możesz mieć podczas uruchamiania selenu w trybie bezgłowym za pomocą Chrome Web Sterownik.

Dostępnych jest wiele innych opcji polecenia Google Chrome, których nie omówiłem w tym artykule. Te opcje wiersza polecenia mogą być przydatne w twoim projekcie. Wszystkie obsługiwane opcje wiersza polecenia Google Chrome można znaleźć na liście przełączników wiersza poleceń Chromium według strony Peter Beverloo.