CodeGym /Kursy /Python SELF PL / Wyszukiwanie elementów za pomocą atrybutów HTML: id, ...

Wyszukiwanie elementów za pomocą atrybutów HTML: id, class

Python SELF PL
Poziom 35, Lekcja 3
Dostępny

1. Podstawy wyszukiwania elementów

Metody wyszukiwania elementów

Zanim skoczymy na głęboką wodę z kodem, ważne jest, aby zrozumieć, w jaki sposób możemy wyszukiwać elementy na stronie za pomocą Selenium. Selenium oferuje kilka przydatnych metod do wyszukiwania elementów:

  • find_element_by_id(): Wyszukuje element po jego unikalnym identyfikatorze (id).
  • find_element_by_name(): Pozwala znaleźć element za pomocą jego atrybutu name.
  • find_element_by_class_name(): Szuka elementów, które mają określoną klasę (class).
  • find_element_by_tag_name(): Używa nazwy tagu do wyszukiwania elementów, np. div, p, a.

Ważne: to składnia Selenium 3. W Selenium 4 te metody zostały usunięte — nowoczesny odpowiednik z By omawiamy w następnym rozdziale.

Zacznijmy od prostego przykładu - wyszukiwania elementu za pomocą id. Wyobraźmy sobie, że zgubiliśmy przycisk z napisem "Magiczny przycisk" i musimy go znaleźć:

Python

from selenium import webdriver

# Konfiguracja drivera i otwieranie przeglądarki
driver = webdriver.Chrome()
driver.get('https://example.com')

# Wyszukiwanie elementu za pomocą id
magic_button = driver.find_element_by_id('magic_button_id')

# Praca z odnalezionym elementem (np. pobieranie tekstu)
print(magic_button.text)

# Zakończenie sesji
driver.quit()

Praca z odnalezionymi elementami

Po odnalezieniu elementu czas zdecydować, co z nim zrobić. Włączamy wyobraźnię i stosujemy metody Selenium, takie jak text w celu uzyskania tekstowej zawartości elementu lub get_attribute('attribute_name'), aby pobrać wartość dowolnego atrybutu elementu.

Załóżmy, że nasz element to link i chcemy dowiedzieć się, dokąd prowadzi. Oto jak to zrobić:

Python

# Wyszukiwanie elementu z linkiem
link_element = driver.find_element_by_class_name('link_class')

# Pobranie URL z atrybutu href
link_url = link_element.get_attribute('href')
print(f'Ten link prowadzi do: {link_url}')

2. Selenium 4: nowoczesne wyszukiwanie przez By

Wszystko, co opisano dalej w tej lekcji, to klasyczna składnia Selenium 3. W Selenium 4 metody find_element_by_* najpierw oznaczono jako przestarzałe, a od wersji Selenium 4.3.0 usunięto je całkowicie. Jeśli uruchomisz taki kod na aktualnej wersji biblioteki, dostaniesz AttributeError.

Zamiast zestawu osobnych metod została jedna uniwersalna find_element(): pierwszym argumentem przekazuje się strategię wyszukiwania z klasy By, a drugim samą wartość. Klasę By trzeba zaimportować osobno:

Python

from selenium.webdriver.common.by import By

Tabela odpowiedników

Selenium 3 Selenium 4 Co robi
find_element_by_id('magic_button_id') find_element(By.ID, 'magic_button_id') Wyszukuje element po jego unikalnym identyfikatorze (id).
find_element_by_name('name') find_element(By.NAME, 'name') Pozwala znaleźć element za pomocą jego atrybutu name.
find_element_by_class_name('class') find_element(By.CLASS_NAME, 'class') Szuka elementów, które mają określoną klasę (class).
find_element_by_tag_name('tag') find_element(By.TAG_NAME, 'tag') Używa nazwy tagu do wyszukiwania elementów, np. div, p, a.

Tak samo zmieniło się wyszukiwanie wszystkich pasujących elementów: zamiast zestawu find_elements_by_*() jest teraz jedno find_elements() z tymi samymi strategiami By. Poza czterema wymienionymi klasa By udostępnia jeszcze By.XPATH, By.CSS_SELECTOR, By.LINK_TEXT i By.PARTIAL_LINK_TEXT — o nich porozmawiamy w kolejnych lekcjach.

Ten sam przykład, ale w Selenium 4

Python

from selenium import webdriver
from selenium.webdriver.common.by import By

# Konfiguracja drivera i otwieranie przeglądarki
driver = webdriver.Chrome()
driver.get('https://example.com')

# Wyszukiwanie elementu za pomocą id
magic_button = driver.find_element(By.ID, 'magic_button_id')

# Praca z odnalezionym elementem (np. pobieranie tekstu)
print(magic_button.text)

# Zakończenie sesji
driver.quit()

Jak widzisz, zmienił się tylko wiersz wyszukiwania — cała reszta działa dokładnie tak samo: metoda zwraca ten sam obiekt elementu z tymi samymi text, get_attribute(), click() i send_keys().

Dalej w lekcji każda metoda jest omówiona w klasycznej postaci find_element_by_* — właśnie tak spotkasz ją w starym kodzie i w części zadań. Przeniesienie dowolnej z nich na Selenium 4 to za każdym razem jedno mechaniczne podstawienie według tabeli powyżej.

3. Metoda find_element_by_id()

Metoda find_element_by_id() – jedna z najszybszych i najbardziej niezawodnych metod wyszukiwania elementów na stronie. Pozwala znaleźć elementy za pomocą ich unikalnego atrybutu id. W HTML atrybut id jest unikalnym identyfikatorem, dlatego możemy być pewni, że metoda zwróci jedyny potrzebny element.

Przykład użycia:

Python

element = driver.find_element_by_id("submit-button")

W tym przykładzie Selenium szuka elementu z id="submit-button" i zapisuje go w zmiennej element. Takie podejście jest wygodne do wyszukiwania przycisków, formularzy, pól wprowadzania i innych unikalnych elementów, które rzadko są duplikowane na stronie.

Kiedy używać?

Stosowanie find_element_by_id() jest zalecane zawsze, gdy element ma unikalny identyfikator id, ponieważ ta metoda zapewnia szybki i precyzyjny dostęp do elementu.

4. Metoda find_element_by_name()

Metoda find_element_by_name() szuka elementów po atrybucie name. Jest często używana do formularzy i pól wprowadzania, szczególnie gdy elementy mogą mieć takie same klasy lub id, ale różne name. W przeciwieństwie do id, atrybut name nie musi być unikalny, a czasami na stronie może być kilka elementów z tą samą wartością name.

Przykład użycia:

Python

element = driver.find_element_by_name("username")

Ten kod wyszukuje element z name="username". Zwykle jest to pole do wprowadzania nazwy użytkownika w formularzach logowania.

Kiedy używać?

Ta metoda jest przydatna, jeśli element nie ma na stronie unikalnego id, ale ma atrybut name. Jest szczególnie skuteczna dla formularzy, gdzie elementy często mają identyfikację za pomocą name.

5. Metoda find_element_by_class_name()

Metoda find_element_by_class_name() szuka elementu po jego klasie (class). Jest przydatna przy pracy z CSS i pozwala znaleźć elementy o takim samym stylu. Należy pamiętać, że class może być przypisany do kilku elementów, dlatego, jeśli potrzebujemy znaleźć tylko jeden element, ważne jest określenie unikalnej klasy lub użycie innej metody.

Przykład użycia:

Python

element = driver.find_element_by_class_name("main-header")

W tym przykładzie Selenium szuka pierwszego elementu z klasą main-header.

Kiedy używać?

find_element_by_class_name() jest często używana do wyszukiwania nagłówków, przycisków i innych stylizowanych elementów. Ta metoda jest szczególnie przydatna, jeśli elementy nie mają unikalnego id ani name, a także w przypadkach, gdy chcemy wyszukiwać elementy po stylach.

6. Metoda find_element_by_tag_name()

Metoda find_element_by_tag_name() szuka elementów po nazwie tagu, na przykład div, p, a, input. Jest przydatna do pobierania wszystkich elementów jednego typu, szczególnie jeśli struktura strony pozwala na łatwą nawigację po tagach.

Przykład użycia:

Python

element = driver.find_element_by_tag_name("h1")

Tutaj Selenium szuka pierwszego elementu z tagiem h1, który zazwyczaj jest używany jako nagłówek strony.

Kiedy używać?

Metoda find_element_by_tag_name() dobrze nadaje się do wyszukiwania nagłówków, obrazów, akapitów i innych elementów reprezentowanych przez określony typ tagu na stronie. Jednak, ponieważ na stronie może być wiele elementów tego samego typu, ta metoda nie zawsze dokładnie wskaże konkretny element.

1
Zadanie
Python SELF PL, poziom 35, lekcja 3
Niedostępne
Wyszukiwanie elementu za pomocą unikalnego identyfikatora
Wyszukiwanie elementu za pomocą unikalnego identyfikatora
2
Zadanie
Python SELF PL, poziom 35, lekcja 3
Niedostępne
Wyszukiwanie i ekstrakcja URL z elementu według klasy
Wyszukiwanie i ekstrakcja URL z elementu według klasy
3
Zadanie
Python SELF PL, poziom 35, lekcja 3
Niedostępne
Wyszukiwanie i interakcja z przyciskiem
Wyszukiwanie i interakcja z przyciskiem
4
Zadanie
Python SELF PL, poziom 35, lekcja 3
Niedostępne
Wyszukiwanie elementów i praca z nimi wewnątrz tabeli
Wyszukiwanie elementów i praca z nimi wewnątrz tabeli
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION