CodeGym /Kurs Javy /Python SELF PL /Automatyzacja pracy z formularzami i przyciskami na stron...

Automatyzacja pracy z formularzami i przyciskami na stronie internetowej do zbierania danych

Python SELF PL
Poziom 37 , Lekcja 3
Dostępny

1. Podstawy techniczne

Wypełnianie i wysyłanie formularzy

Praca z formularzami jest często potrzebna do automatyzacji rejestracji użytkowników, wypełniania ankiet, zbierania danych i wielu innych rzeczy. Kiedy musisz wypełnić setki formularzy, ręczne zrobienie tego to jak próba zjedzenia arbuza przez słomkę. Dzięki naszym supermocom z Selenium zrobimy to w kilka sekund.

Najpierw zorientujmy się, jak możemy wypełniać pola tekstowe i wysyłać formularze. Na przykładzie typowego formularza logowania na stronie internetowej przeanalizujemy podstawowe kroki:

Python

from selenium import webdriver

# Konfiguracja drivera (np. ChromeDriver)
driver = webdriver.Chrome()

try:
    # Otwieranie strony internetowej
    driver.get("https://example.com/login")

    # Znajdowanie pola wprowadzania dla nazwy użytkownika i wpisywanie tekstu
    username_input = driver.find_element_by_name("username")
    username_input.send_keys("mój_login")

    # Znajdowanie pola wprowadzania dla hasła i wpisywanie tekstu
    password_input = driver.find_element_by_name("password")
    password_input.send_keys("moje_hasło")

    # Znajdowanie przycisku do wysyłania formularza i kliknięcie go
    submit_button = driver.find_element_by_name("submit")
    submit_button.click()

finally:
    # Zamknięcie drivera
    driver.quit()
    

Walidacja i obsługa błędów

Nic bardziej nie psuje dnia programisty niż błędy wyskakujące w nieodpowiednim momencie. Dlatego obsługujemy je wcześniej. Używamy try/except, aby przechwycić błędy i prowadzimy logi, aby zrozumieć, co poszło nie tak.

Python

try:
    username_input = driver.find_element_by_name("username")
    username_input.send_keys("mój_login")
except Exception as e:
    print(f"Błąd podczas wypełniania nazwy użytkownika: {e}")
    logging.error("Błąd podczas wypełniania nazwy użytkownika", exc_info=True)
    

2. Checkboxy (Checkboxes)

Skoro już nauczyliśmy się klikać przyciski, spróbujmy wybrać kilka opcji z listy. Aby zaznaczyć lub odznaczyć checkbox, można również użyć metody click(). Jeśli potrzebujemy sprawdzić, czy checkbox jest zaznaczony, używamy atrybutu is_selected().

Python

checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
    checkbox.click()
    

3. Radio Buttony (Radio Buttons)

Przyciski radiowe pozwalają wybierać tylko jedną opcję z kilku. Pracować z nimi można jak z checkboxami: wybierać opcję za pomocą metody click() i sprawdzać stan za pomocą is_selected().

Python

radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
    radio_button.click()
    

4. Dropdowny (Dropdowns)

Dropdowny zawierają kilka opcji do wyboru. W Selenium jest klasa Select, która dostarcza metody do pracy z takimi listami.

Python

from selenium.webdriver.support.ui import Select

dropdown = Select(driver.find_element_by_id("dropdown_id"))
dropdown.select_by_visible_text("Option 1")
    

Można również wybierać opcje za pomocą select_by_index() lub select_by_value().

5. Pola tekstowe (Text Areas)

Pola tekstowe są podobne do pól tekstowych, ale zazwyczaj są używane do wprowadzania dużej ilości tekstu. Praca z nimi odbywa się w taki sam sposób, jak z polami tekstowymi.

Python

text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("To jest przykładowy tekst dla pola tekstowego.")
    

6. Kalendarz (Date Picker)

Pola kalendarza pozwalają użytkownikom wybierać daty. Jeśli jest to zwykłe pole tekstowe obsługujące format daty, można użyć send_keys(), aby wprowadzić wartość w odpowiednim formacie.

Python

date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25")  # Format daty może się różnić w zależności od strony
    

Niekiedy jednak pola kalendarza wymagają dodatkowych działań, takich jak otwarcie wyskakującego kalendarza i wybór daty.

7. Pola do przesyłania plików (File Upload)

Te pola pozwalają przesyłać pliki na serwer. Interakcja z nimi odbywa się również za pomocą metody send_keys(), podając ścieżkę do pliku na komputerze lokalnym.

Python

file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
    

8. Pola ukryte (Hidden Fields)

Pola ukryte nie są widoczne na stronie, ale mogą być używane do przechowywania informacji potrzebnych do wysyłania formularza. Interakcja z nimi jest możliwa tylko wtedy, gdy mamy dostęp do ich wartości (np. w celu sprawdzenia lub zmiany wartości).

Python

hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("Wartość ukrytego pola:", value)
    

9. Sprawdzanie poprawności wykonania działań

Uzyskiwanie danych o wykonanych działaniach to Twój barometr sukcesu. Po wysłaniu formularza na pewno chcesz się upewnić, że wniosek został pomyślnie przyjęty, prawda? Oto jak to zrobić:

Python

># Sprawdzanie poprawności logowania na stronie
if "Witamy" in driver.page_source:
    print("Logowanie zakończone sukcesem!")
else:
    print("Wystąpił błąd podczas logowania.")
    

10. Problemy i rozwiązania

Problemy

  • Nieprzewidywalność działania: Strony internetowe często się zmieniają. Zmiana struktury strony może prowadzić do awarii skryptów, dlatego regularna kontrola kodu pod kątem aktualności jest konieczna.
  • Zależność od szybkości sieci: Czas ładowania stron i elementów może się różnić. Używaj widocznych oczekiwań (explicit waits) do obsługi opóźnień.

Rozwiązania

  • Logowanie: Prowadź log wszystkich działań, aby lepiej rozumieć problemy. Użycie biblioteki logging znacznie ułatwi prowadzenie logów.
  • Modularność kodu: Dziel skomplikowane działania na funkcje i moduły, aby łatwiej wprowadzać zmiany i testować je.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION