1. Wprowadzenie do interakcji z elementami formularzy
Formularze na stronach internetowych to miejsce, gdzie zaczyna się magia interakcji. Wyobraź sobie formularz jako tajemniczy pilot sterowania, który pozwala użytkownikowi komunikować się z systemem. Ale zamiast wydawać polecenia robotowi sprzątającemu, przekazujemy informacje stronie.
Jak wpisywać tekst w pola tekstowe
Na początek omówmy, jak Selenium pozwala nam wpisywać tekst w pola tekstowe. Robi się to za pomocą metody send_keys()
. Zanurzmy się w to krok po kroku.
from selenium import webdriver
# Podajemy ścieżkę do web-drivera, to jest ścieżka do twojej kopii webdrivera
driver = webdriver.Chrome(executable_path='path/to/chromedriver')
# Otwieramy stronę internetową
driver.get('http://example.com/login')
# Znajdujemy pole wprowadzania (np. po id) i wpisujemy tekst
username_field = driver.find_element_by_id('username')
username_field.send_keys('moje_super_konto')
password_field = driver.find_element_by_id('password')
password_field.send_keys('moje_super_tajne_hasło')
W tym prostym przykładzie otwieramy stronę, znajdujemy pola tekstowe po ich ID
, a następnie używamy metody send_keys()
, aby przekazać tekst do pól. Tak, to jest tak proste, jak kopiuj-wklej na nowym poziomie!
Ważny trik dla wypełniania pól tekstowych
Jeśli wydaje ci się, że formularz zachowuje się dziwnie, możliwe, że w polu tekstowym już jest tekst. Zanim wprowadzisz nowy tekst, wyczyść stary za pomocą metody clear()
.
username_field.clear()
username_field.send_keys('nowa_wartość')
Ten mały trik uratuje cię przed wieloma problemami, naprawdę!
2. Klikanie przycisków
Teraz, gdy nasze pola tekstowe są wypełnione, czas kliknąć przycisk, np. aby wysłać formularz. W Selenium robi się to za pomocą metody click()
. Coś jak klikanie "Zobacz więcej memów", tylko programowo.
# Znajdujemy przycisk po nazwie i klikamy
login_button = driver.find_element_by_name('login')
login_button.click()
I tak oto twój skrypt Selenium staje się mistrzem klikania przycisków, zdolnym do więcej niż tylko klikania "Wybierz" w grach!
Przykłady użycia
Przyjrzyjmy się przykładom, które łączą wykorzystanie metod send_keys()
i click()
do wypełniania i wysyłania formularza rejestracyjnego.
# Otwieramy stronę rejestracyjną
driver.get('http://example.com/register')
# Wypełniamy formularz rejestracyjny
driver.find_element_by_id('first_name').send_keys('Jan')
driver.find_element_by_id('last_name').send_keys('Kowalski')
driver.find_element_by_id('email').send_keys('jan@example.com')
driver.find_element_by_id('password').send_keys('superTajne123')
# Klikamy przycisk "Zarejestruj się"
register_button = driver.find_element_by_css_selector('.register-button')
register_button.click()
Ten prosty przykład pokazuje, jak możesz zautomatyzować proces rejestracji na stronie. To może być przydatne do testowania formularza rejestracji i symulacji aktywności użytkowników.
3. Obsługa kapryśnych formularzy
Czasami strony lubią się z tobą drażnić. Klikasz przycisk i nic się nie dzieje. Albo co gorsza — strona pokazuje błąd. Omówmy kilka typowych problemów i jak je rozwiązać.
Praca z dynamicznymi elementami
Czasami elementy na stronie ładują się z opóźnieniem. Twój skrypt może próbować wejść w interakcję z elementem, zanim ten się pojawi. To jak próbowanie zrobić omlet, zanim przyniesiesz jajka z lodówki.
Aby uniknąć takich kaprysów, możesz użyć oczekiwań. Selenium pozwala ci poczekać, aż element stanie się dostępny:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Czekamy, aż element stanie się klikalny, zanim klikniesz
register_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, '.register-button'))
)
register_button.click()
Dzięki WebDriverWait
możesz powiedzieć Selenium, żeby poczekał, aż element będzie gotowy do działania. To znacznie zwiększa niezawodność twojego skryptu.
Interakcja z niewidocznymi elementami
Niektóre elementy na stronie mogą być niewidoczne — np. ukryte przyciski lub pola. Może to powodować błąd przy próbie interakcji. W takim przypadku możesz uczynić element widocznym za pomocą JavaScript:
driver.execute_script("arguments[0].style.visibility='visible';", hidden_element)
hidden_element.click()
Ta metoda pozwala ci wchodzić w interakcję z elementami, które z jakiegoś powodu są ukryte.
4. Praktyczne zastosowanie: automatyzacja formularzy
Teraz, gdy wiemy, jak wchodzić w interakcję z formularzami, wyobraźmy sobie, gdzie to można zastosować w prawdziwym życiu.
Twój szef postanowił, że wszyscy muszą codziennie wypełniać raporty przez formularz internetowy. Ty oczywiście chcesz trochę zautomatyzować tę rutynę. Dzięki Selenium możesz stworzyć skrypt, który automatycznie wypełnia i wysyła formularz z danymi twojego raportu każdego dnia.
Przykład automatyzacji raportu
Wyobraź sobie, że mamy stronę z formularzem dziennego raportu. Formularz zawiera pola na twoje imię, dział oraz raport z wykonanej pracy. Zautomatyzujmy to:
driver.get('http://example.com/daily_report')
# Wypełniamy formularz raportu
driver.find_element_by_id('name').send_keys('Anna Kowalska')
driver.find_element_by_id('department').send_keys('Technologia')
driver.find_element_by_id('report').send_keys('Dzisiaj naprawiłam wszystkie błędy!')
# Wysyłamy formularz
submit_button = driver.find_element_by_id('submit')
submit_button.click()
Taki skrypt może zaoszczędzić cenny czas i wyeliminować możliwość ludzkich błędów. Pamiętaj, że w przypadku skomplikowanych formularzy warto przetestować każdy krok i uwzględnić możliwe błędy.
I tak doszliśmy do końca naszego wykładu na dziś! Nauczyliśmy się wprowadzać tekst do pól i klikać przyciski jak systemy ankiet online, co daje ci niesamowitą moc automatyzacji interakcji z witrynami.
Kontynuuj eksperymentowanie z Selenium i zostań z nami, aby dowiedzieć się więcej o tym, jak przekształcić swoją przeglądarkę w prawdziwą maszynę do automatyzacji!
GO TO FULL VERSION