Za pomocą XPath i Selenium do znalezienia elementu na stronie HTML

Za pomocą XPath i Selenium do znalezienia elementu na stronie HTML
Xpath, znany również jako XML Path Language, jest językiem do wybierania elementów z dokumentu XML. Ponieważ HTML i XML są zgodne z tą samą strukturą dokumentu, XPath można również użyć do wyboru elementów ze strony internetowej.

Lokalizacja i wybieranie elementów ze strony internetowej jest kluczem do skrobania internetowego za pomocą selenu. Do lokalizacji i wybierania elementów ze strony internetowej możesz użyć selektorów XPath w Selenium.

W tym artykule pokażę, jak zlokalizować i wybrać elementy ze stron internetowych za pomocą selektorów XPath w Selenium z biblioteką Selenium Python. Więc zacznijmy.

Wymagania wstępne:

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

  1. Dystrybucja Linuksa (najlepiej Ubuntu) zainstalowana na komputerze.
  2. Python 3 zainstalowany na komputerze.
  3. PIP 3 zainstalowany na komputerze.
  4. Pyton Virtualenv Pakiet zainstalowany na komputerze.
  5. Przeglądarki internetowe Mozilla Firefox lub Google Chrome zainstalowane na komputerze.
  6. Muszę wiedzieć, jak zainstalować sterownik Gecko Firefox lub Chrome Web Sterownik.

Aby spełnić wymagania 4, 5 i 6, przeczytaj mój artykuł Wprowadzenie do selenu w Pythonie 3. Można znaleźć wiele artykułów na inne tematy na Linuxhint.com. Pamiętaj, aby je sprawdzić, jeśli potrzebujesz pomocy.

Konfiguracja katalogu projektu:

Aby wszystko się zorganizowano, stwórz nowy katalog projektowy selen-xpath/ następująco:

$ mkdir -pv selen -xpath/sterowniki

Przejść do selen-xpath/ Katalog projektu w następujący sposób:

$ cd selen-xpath/

Utwórz wirtualne środowisko Python w katalogu projektu w następujący sposób:

$ Virtualenv .Venv

Aktywuj środowisko wirtualne w następujący sposób:

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

Zainstaluj bibliotekę Selenium Python za pomocą PIP3 w następujący sposób:

$ PIP3 instaluj selen

Pobierz i zainstaluj cały wymagany sterownik internetowy w kierowcy/ Katalog projektu. Wyjaśniłem proces pobierania i instalowania sterowników internetowych w moim artykule Wprowadzenie do selenu w Pythonie 3.

Pobierz selektor XPath za pomocą narzędzia Chrome Developer:

W tej sekcji pokażę Ci, jak znaleźć selektor XPATH elementu strony internetowej, który chcesz wybrać z Selenium za pomocą wbudowanego narzędzia programistów w przeglądarce internetowej Google Chrome.

Aby uzyskać selektor XPath za pomocą przeglądarki internetowej Google Chrome, otwórz Google Chrome i odwiedź stronę internetową, z której chcesz wyodrębnić dane. Następnie naciśnij prawy przycisk myszy (RMB) na pustym obszarze strony i kliknij Sprawdzać otworzyć Narzędzie do programisty Chrome.

Możesz także nacisnąć + Zmiana + I otworzyć Narzędzie do programisty Chrome.

Narzędzie do programisty Chrome należy otworzyć.

Aby znaleźć reprezentację HTML żądanego elementu strony internetowej, kliknij Sprawdzać(

) ikona, jak zaznaczono na zrzucie ekranu poniżej.

Następnie unosisz się nad żądanym elementem strony internetowej i naciśnij lewy przycisk myszy (LMB), aby go wybrać.

Reprezentacja HTML wybranego elementu Web zostanie wyróżniona w Elementy zakładka Narzędzie do programisty Chrome, Jak widać na zrzucie ekranu poniżej.

Aby uzyskać selektor xpath żądanego elementu, wybierz element z Elementy zakładka Narzędzie do programisty Chrome i kliknij prawym przyciskiem myszy (RMB). Następnie wybierz Kopiuj > Kopiuj xpath, jak zaznaczono na zrzucie ekranu poniżej.

Wkleiłem selektor XPath w edytorze tekstu. Selektor XPath wygląda jak pokazano na zrzucie ekranu poniżej.

Pobierz selektor XPath za pomocą narzędzia programistów Firefox:

W tej sekcji pokażę Ci, jak znaleźć selektor XPath elementu strony internetowej, którą chcesz wybrać z Selenium za pomocą wbudowanego narzędzia programistów w przeglądarce internetowej Mozilla Firefox.

Aby uzyskać selektor XPath za pomocą przeglądarki internetowej Firefox, otwórz Firefox i odwiedź stronę internetową, z której chcesz wyodrębnić dane. Następnie naciśnij prawy przycisk myszy (RMB) na pustym obszarze strony i kliknij Sprawdź element (Q) otworzyć Narzędzie programistów Firefox.

Narzędzie programistów Firefox należy otworzyć.

Aby znaleźć reprezentację HTML żądanego elementu strony internetowej, kliknij Sprawdzać(

) ikona, jak zaznaczono na zrzucie ekranu poniżej.

Następnie unosisz się nad żądanym elementem strony internetowej i naciśnij lewy przycisk myszy (LMB), aby go wybrać.

Reprezentacja HTML wybranego elementu Web zostanie wyróżniona w Inspektor zakładka Narzędzie programistów Firefox, Jak widać na zrzucie ekranu poniżej.

Aby uzyskać selektor xpath żądanego elementu, wybierz element z Inspektor zakładka Narzędzie programistów Firefox i kliknij prawym przyciskiem myszy (RMB). Następnie wybierz Kopiuj > Xpath jak zaznaczono na zrzucie ekranu poniżej.

Selektor xpath pożądanego elementu powinien wyglądać tak mniej więcej tak.

Wyodrębnienie danych ze stron internetowych za pomocą selektora XPath:

W tej sekcji pokażę, jak wybrać elementy strony internetowej i wyodrębnić z nich dane za pomocą selektorów XPath z biblioteką Selenium Python.

Najpierw stwórz nowy skrypt Python Ex01.py i wpisz następujące wiersze kodów.

od selenu importu Webdriver
z selenu.Webdriver.wspólny.Klucze importują klucze
z selenu.Webdriver.wspólny.przez import przez
opcje = WebDriver.Chromeoptions ()
opcje.bezgłowy = prawda
Browser = WebDriver.Chrome (Exceutable_path = "./sterowniki/chromedriver ",
opcje = opcje)
przeglądarka.Get ("https: // www.UNIXTIMESTAMP.com/”)
Timestamp = przeglądarka.find_element_by_xpath ('/html/body/div [1]/div [1]
/div [2]/div [1]/div/div/h3 [2] ')
Drukuj („Obecny znacznik czasu: % s” (znacznik czasu.tekst.split (") [0]))
przeglądarka.zamknąć()

Po zakończeniu zapisz Ex01.py Skrypt Pythona.

Linia 1-3 importuje wszystkie wymagane elementy selenu.

Linia 5 tworzy obiekt opcji Chrome, a linia 6 włącza tryb bezgłowy dla przeglądarki internetowej Chrome.

Linia 8 tworzy chrom przeglądarka obiekt za pomocą chromedriver binarny z kierowcy/ Katalog projektu.

Linia 10 informuje przeglądarkę, aby załadował witrynę UNIXTIMESTAMP.com.

Wiersz 12 znajduje element, który ma dane znacznika czasu ze strony za pomocą selektora XPath i przechowuje go w znak czasu zmienny.

Wiersz 13 analizuje dane ze znaczników czasu z elementu i drukuje je na konsoli.

Skopiowałem selektor XPath oznaczonych H2 element z UNIXTIMESTAMP.com Korzystanie z narzędzia Chrome Developer.

Linia 14 zamyka przeglądarkę.

Uruchom skrypt Python Ex01.py następująco:

$ Python3 Ex01.py

Jak widać, na ekranie wydrukowane są dane dotyczące znacznika czasu.

Tutaj użyłem przeglądarka.find_element_by_xpath (selektor) metoda. Jedynym parametrem tej metody jest selektor, który jest selektorem XPath elementu.

Zamiast przeglądarka.find_element_by_xpath () metoda, możesz również użyć przeglądarka.Find_element (przez, selektor) metoda. Ta metoda wymaga dwóch parametrów. Pierwszy parametr Przez będzie Przez.Xpath ponieważ będziemy używać selektora XPath i drugiego parametru selektor będzie sam selektor XPath. Wynik będzie taki sam.

Aby zobaczyć, jak przeglądarka.find_element () Metoda działa dla selektora XPath, utwórz nowy skrypt Python Ex02.py, skopiuj i wklej wszystkie linie z Ex01.py Do Ex02.py i zmień Linia 12 jak zaznaczono na zrzucie ekranu poniżej.

Jak widać, skrypt Python Ex02.py daje ten sam wynik co Ex01.py.

$ Python3 Ex02.py

przeglądarka.find_element_by_xpath () I przeglądarka.find_element () Metody są używane do znalezienia i wyboru pojedynczego elementu ze stron internetowych. Jeśli chcesz znaleźć i wybrać wiele elementów za pomocą selektorów XPath, musisz użyć przeglądarka.find_elements_by_xpath () Lub przeglądarka.Find_elements () metody.

przeglądarka.find_elements_by_xpath () Metoda przyjmuje ten sam argument co przeglądarka.find_element_by_xpath () metoda.

przeglądarka.Find_elements () Metoda przyjmuje takie same argumenty jak przeglądarka.find_element () metoda.

Zobaczmy przykład wyodrębnienia listy nazw przy użyciu selektora XPath z losowo-nazwa-generator.informacje z biblioteką selenium Python.

Lista nieopisana (ol tag) ma 10 Li Tagi w każdym z nich zawierają losową nazwę. Xpath, aby wybrać wszystkie Li tagi wewnątrz ol tag w tym przypadku jest //*[@id = ”main”]/div [3]/div [2]/ol // li

Przejrzyjmy przykład wyboru wielu elementów ze strony internetowej za pomocą selektorów XPath.

Utwórz nowy skrypt Python Ex03.py i wpisz w poniższych wierszach kodów.

od selenu importu Webdriver
z selenu.Webdriver.wspólny.Klucze importują klucze
z selenu.Webdriver.wspólny.przez import przez
opcje = WebDriver.Chromeoptions ()
opcje.bezgłowy = prawda
Browser = WebDriver.Chrome (Exceutable_path = "./sterowniki/chromedriver ",
opcje = opcje)
przeglądarka.GET ("http: // losowo-nazwa generator.Informacje/")
Nazwy = przeglądarka.find_elements_by_xpath ('
//*[@id = "main"]/div [3]/div [2]/ol // li ')
dla nazwy w imieniu:
Nazwa wydruku.tekst)
przeglądarka.zamknąć()

Po zakończeniu zapisz Ex03.py Skrypt Pythona.

Linia 1-8 jest taka sama jak w Ex01.py Skrypt Pythona. Więc nie zamierzam ich znowu wyjaśnić.

Linia 10 informuje przeglądarkę, aby załadował witrynę losowo-nazwa-generator.informacje.

Wiersz 12 wybiera listę nazw za pomocą przeglądarka.find_elements_by_xpath () metoda. Ta metoda wykorzystuje selektor XPath //*[@id = ”main”]/div [3]/div [2]/ol // li Aby znaleźć listę nazwisk. Następnie lista nazw jest przechowywana w nazwy zmienny.

W wierszach 13 i 14, a Do pętla służy do iteracji przez nazwy Wymień i wydrukuj nazwy na konsoli.

Linia 16 zamyka przeglądarkę.

Uruchom skrypt Python Ex03.py następująco:

$ Python3 Ex03.py

Jak widać, nazwy są wyodrębnione ze strony internetowej i wydrukowane na konsoli.

Zamiast używać przeglądarka.find_elements_by_xpath () metoda, możesz również użyć przeglądarka.Find_elements () metoda jak poprzednio. Pierwszym argumentem tej metody jest Przez.Xpath, a drugim argumentem jest selektor XPath.

Eksperymentować z przeglądarka.Find_elements () Metoda, utwórz nowy skrypt Python Ex04.py, Skopiuj wszystkie kody z Ex03.py Do Ex04.py, i zmień linię 12, jak zaznaczono na zrzucie ekranu poniżej.

Powinieneś uzyskać taki sam wynik jak poprzednio.

$ Python3 Ex04.py

Podstawy selektora XPath:

Narzędzie programistów przeglądarki internetowej Firefox lub Google Chrome generuje automatycznie selektor XPath. Ale ci selektory XPath czasami nie są wystarczające do twojego projektu. W takim przypadku musisz wiedzieć, co robi pewien selektor XPath, aby zbudować swój selektor XPATH. W tej sekcji pokażę ci podstaw selektorów XPath. Następnie powinieneś być w stanie zbudować własny selektor XPath.

Utwórz nowy katalog www/ W katalogu projektu w następujący sposób:

$ mkdir -v www

Utwórz nowy plik Web01.html w www/ katalog i wpisz w następujących wierszach w tym pliku.






Podstawowy dokument HTML


Witaj świecie



Po zakończeniu zapisz Web01.html plik.

Uruchom prosty serwer HTTP na porcie 8080 za pomocą następującego polecenia:

$ python3 -m http.serwer -Directory WWW/ 8080

Serwer HTTP powinien się uruchomić.

Powinieneś mieć dostęp do Web01.html Plik za pomocą adresu URL http: // localhost: 8080/web01.html, jak widać na zrzucie ekranu poniżej.

Podczas otwarcia narzędzie do programisty Firefox lub Chrome, naciśnij + F Aby otworzyć pole wyszukiwania. Możesz wpisać tutaj swój selektor xpath i zobaczyć, co bardzo łatwo wybierze. Będę używać tego narzędzia w tej sekcji.

Selektor XPath zaczyna się od ukośnik (/) większość czasu. To jest jak drzewo katalogu Linuksa. / jest źródłem wszystkich elementów na stronie internetowej.

Pierwszym elementem jest html. Tak więc selektor XPath /html wybiera całość html etykietka.

W środku html tag, mamy ciało etykietka. ciało Tag można wybrać za pomocą selektora XPath /html/korpus

H1 Nagłówek jest w środku ciało etykietka. H1 Nagłówek można wybrać za pomocą selektora XPath /html/body/h1

Ten typ selektora XPath nazywa się absolutnym wyborem ścieżki. W absolutnym selekcecie ścieżki musisz przemierzać stronę internetową z głównego (/) strony. Wadą absolutnego selektora ścieżki jest to, że nawet niewielka zmiana struktury strony internetowej może sprawić, że Twój selektor XPath jest nieprawidłowy. Rozwiązaniem tego problemu jest względny lub częściowy selektor XPath.

Aby zobaczyć, jak działa względna ścieżka lub ścieżka częściowa, utwórz nowy plik Web02.html w www/ katalog i typ w następujących wierszach kodów.






Podstawowy dokument HTML


Witaj świecie



To jest wiadomość




Witaj świecie


Po zakończeniu zapisz Web02.html Złóż i załaduj go do przeglądarki internetowej.

Jak widać, selektor xpath // div/p wybiera P tag wewnątrz div etykietka. To jest przykład względnego selektora XPath.

Względny selektor xpath zaczyna się od //. Następnie określisz strukturę elementu, który chcesz wybrać. W tym przypadku, Div/p.

Więc, // div/p oznacza wybierz P element wewnątrz a div element, nie ma znaczenia, co się przed nim stanie.

Możesz także wybrać elementy według różnych atrybutów, takich jak ID, klasa, typ, itp. za pomocą selektora XPath. Zobaczmy, jak to zrobić.

Utwórz nowy plik Web03.html w www/ katalog i typ w następujących wierszach kodów.






Podstawowy dokument HTML


Witaj świecie



To jest wiadomość


To kolejna wiadomość


nagłówek 2


LoreM ipsum dolor sit amet consectetur, adipisicing elit. Quibusdam
eligendi doloribus sapiente, molestias quos quae non nam incydunt quis delectus
facilis minfifice alias neque atque fuga? Unde, auto natus?




To jest stopka


Po zakończeniu zapisz Web03.html Złóż i załaduj go do przeglądarki internetowej.

Powiedzmy, że chcesz wybrać wszystkie div elementy, które mają klasa nazwa kontener1. Aby to zrobić, możesz użyć selektora XPath // div [@class = 'Container1']

Jak widać, mam 2 elementy pasujące do selektora XPath // div [@class = 'Container1']

Aby wybrać pierwszy div element z klasa nazwa kontener1, dodać [1] Na końcu XPath Select, jak pokazano na zrzucie ekranu poniżej.

W ten sam sposób, możesz wybrać drugi div element z klasa nazwa kontener1 za pomocą selektora XPath // div [@class = 'Contener1'] [2]

Możesz wybrać elementy według ID również.

Na przykład, aby wybrać element, który ma ID z Foke-MSG, Możesz użyć selektora XPath //*[@id = 'stope-msg']

Tutaj * zanim [@id = 'stope-msg'] służy do wyboru dowolnego elementu, niezależnie od ich tagu.

To są podstawy selektora XPath. Teraz powinieneś być w stanie stworzyć własny selektor XPath dla projektów selenium.

Wniosek:

W tym artykule pokazałem, jak znaleźć i wybrać elementy ze stron internetowych za pomocą selektora XPath z biblioteką selenium Python. Omówiłem również najczęstszych selektorów XPath. Po przeczytaniu tego artykułu powinieneś poczuć się pewnie, wybierając elementy na stronach internetowych za pomocą selektora XPath z biblioteką Selenium Python.