CodeGym /Kursy /Python SELF PL /Tworzenie funkcji do wyszukiwania i interakcji z elementa...

Tworzenie funkcji do wyszukiwania i interakcji z elementami na stronie internetowej

Python SELF PL
Poziom 37 , Lekcja 2
Dostępny

1. Podstawy wyszukiwania elementów na stronie

Użycie metod wyszukiwania elementów

Gdy zaczynasz korzystać z Selenium w prawdziwych projektach, jedną z pierwszych zadań będzie wyszukiwanie elementów na stronie. To można porównać do szukania przycisku windy w hotelu: musisz wiedzieć, gdzie się znajduje, żeby go nacisnąć i pojechać na odpowiednie piętro.

Selenium daje kilka metod do wyszukiwania elementów. W zależności od twoich preferencji, możesz użyć find_element_by_id, find_element_by_name, find_element_by_xpath, find_element_by_css_selector, itd. Pamiętajmy, co już wiesz - i napiszmy prosty przykład:

Python

from selenium import webdriver

# Tworzymy instancję przeglądarki (tutaj używamy Chrome)
driver = webdriver.Chrome()

# Otwieramy stronę
driver.get('http://example.com')

# Wyszukiwanie elementu po ID
element_by_id = driver.find_element_by_id('main')

# Wyszukiwanie elementu po nazwie
element_by_name = driver.find_element_by_name('username')

# Wyszukiwanie elementu po XPath
element_by_xpath = driver.find_element_by_xpath('//div[@class="content"]')

# Wyszukiwanie elementu po selektorze CSS
element_by_css = driver.find_element_by_css_selector('div.content')

Różnice między find_element i find_elements

Jeśli masz kilka elementów, które chcesz znaleźć (na przykład wszystkie przyciski z klasą btn), potrzebujesz metody find_elements. Różnica między find_element i find_elements polega na tym, że pierwsza zwraca jeden element, a druga zwraca listę elementów.

Python

# Wyszukiwanie jednego elementu
single_element = driver.find_element_by_class_name('btn')

# Wyszukiwanie kilku elementów
multiple_elements = driver.find_elements_by_class_name('btn')

# Iterowanie przez znalezione elementy
for element in multiple_elements:
    print(element.text)

Jak widzisz, find_elements świetnie sprawdza się do pracy z kolekcjami elementów, które mogą być liczne na stronie. Każda metoda find_element_xxx ma swój find_elements_xxx, która zwraca listę elementów.

2. Interaktywna interakcja z elementami

Interakcja z przyciskami, linkami i polami tekstowymi

Teraz, gdy przypomniałeś sobie, jak wyszukiwać elementy, czas przypomnieć sobie, jak z nimi współpracować! To jak składanie zestawu LEGO: musisz odpowiednio połączyć elementy, żeby osiągnąć to, co zamierzasz.

Interakcja z elementami może zostać osiągnięta dzięki metodom oferowanym przez Selenium. Spójrzmy jeszcze raz, jak to się robi:

Python

# Kliknięcie na przycisk
button = driver.find_element_by_id('submit')
button.click()

# Wpisywanie tekstu w pole tekstowe
input_field = driver.find_element_by_name('q')
input_field.send_keys('Python selenium tutorial')

# Pobieranie tekstu z elementu
header = driver.find_element_by_tag_name('h1')
print(header.text)

Obsługa zdarzeń i działania z dynamicznymi elementami

Kiedy przychodzi czas na pracę z dynamicznymi elementami, takimi jak przyciski, które pojawiają się dopiero po określonej akcji, ważne jest uwzględnienie opóźnień i oczekiwań. Selenium oferuje sposoby czekania na załadowanie takich elementów. Na przykład za pomocą klasy WebDriverWait w połączeniu z expected_conditions.

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Oczekiwanie na pojawienie się przycisku przez 10 sekund
button = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, 'submit'))
)

button.click()

Uwaga. Aby nie pisać za każdym razem expected_conditions, zmieniliśmy jego nazwę przy imporcie na EC.

Użycie oczekiwania sprawia, że twój skrypt jest bardziej niezawodny i nie psuje się przez chwilowe opóźnienia lub wolne ładowanie strony. A w praktyce to zdarza się bardzo często - niemal zawsze :)

3. Co może pójść nie tak?

Wszystko. Wszystko może pójść nie tak. Właśnie przygotowałeś się na interakcję z elementami, ale nagle bum, coś poszło nie tak. Porozmawiajmy o typowych błędach, które mogą cię spotkać po drodze.

Po pierwsze, NoSuchElementException — to wiadomość o błędzie, którą zobaczysz dość często, zwłaszcza jeśli element, którego szukasz, nie istnieje na stronie. Jest wywołany, gdy próbujesz znaleźć element, którego nie ma. Aby zapobiec takim sytuacjom, możesz użyć metody try-except do obsługi wyjątków.

Python

from selenium.common.exceptions import NoSuchElementException

try:
    element = driver.find_element_by_id('non_existent_id')
except NoSuchElementException:
    print("Ups, chyba element nie został znaleziony!")

Możliwe są również problemy z dynamicznymi elementami i czasem ładowania. W takim przypadku poczekaj na załadowanie elementów za pomocą WebDriverWait, jak omówiliśmy wcześniej.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION