JavaRush /Курси /Python SELF UA /Автоматизація роботи з формами та кнопками на веб-сторінц...

Автоматизація роботи з формами та кнопками на веб-сторінці для збору даних

Python SELF UA
Рівень 37 , Лекція 3
Відкрита

1. Технічні основи

Заповнення та відправка форм

Робота з формами часто потрібна для автоматизації реєстрації користувачів, заповнення анкет, збору даних і багато іншого. Коли тобі потрібно заповнити сотні форм, вручну це зробити — ніби спробувати з’їсти кавун через соломинку. А нашими суперздатностями з Selenium ми зробимо це за кілька секунд.

Давай спочатку розберемо, як ми можемо заповнювати текстові поля і відправляти форми. На прикладі типової форми входу на сайт ми вивчимо основні кроки:

Python

from selenium import webdriver

# Налаштування драйвера (наприклад, ChromeDriver)
driver = webdriver.Chrome()

try:
    # Відкриття веб-сторінки
    driver.get("https://example.com/login")

    # Пошук поля введення для імені користувача і введення тексту
    username_input = driver.find_element_by_name("username")
    username_input.send_keys("мій_логін")

    # Пошук поля введення для пароля і введення тексту
    password_input = driver.find_element_by_name("password")
    password_input.send_keys("мій_пароль")

    # Пошук кнопки відправки форми і натискання на неї
    submit_button = driver.find_element_by_name("submit")
    submit_button.click()

finally:
    # Закриття драйвера
    driver.quit()
    

Валідація та обробка помилок

Ніщо так не псує день програміста, як помилки, що з'являються в найнепотрібніший момент. Тому обробляємо їх заздалегідь. Використовуємо try/except для перехоплення помилок і ведемо логи, щоб розібратися, що пішло не так.

Python

try:
    username_input = driver.find_element_by_name("username")
    username_input.send_keys("мій_логін")
except Exception as e:
    print(f"Помилка при заповненні імені користувача: {e}")
    logging.error("Помилка при заповненні імені користувача", exc_info=True)
    

2. Прапорці (Checkboxes)

Тепер, коли ми вже навчилися натискати кнопки, давай спробуємо вибирати кілька опцій зі списку. Щоб поставити або зняти прапорець, можна також використовувати метод click(). Якщо потрібно перевірити, чи встановлено прапорець, використовується атрибут is_selected().

Python

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

3. Перемикачі (Radio Buttons)

Перемикачі дозволяють вибирати тільки одну опцію з декількох. Працювати з ними можна як з прапорцями: вибирати опцію за допомогою методу click() і перевіряти стан за допомогою is_selected().

Python

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

4. Випадаючі списки (Dropdowns)

Випадаючі списки містять кілька варіантів на вибір. У Selenium є клас Select, який надає методи для роботи з такими списками.

Python

from selenium.webdriver.support.ui import Select

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

Також можна вибирати варіанти за допомогою select_by_index() або select_by_value().

5. Текстові області (Text Areas)

Текстові області схожі на текстові поля, але зазвичай використовуються для введення великого обсягу тексту. Робота з ними ідентична роботі з текстовими полями.

Python

text_area = driver.find_element_by_id("textarea_id")
text_area.send_keys("This is a sample text for the text area.")
    

6. Календар (Date Picker)

Календарні поля дозволяють користувачам вибирати дати. Якщо це звичайне текстове поле, яке підтримує формат дати, можна використовувати send_keys() для введення значення у потрібному форматі.

Python

date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25")  # Формат дати може варіюватися залежно від сайту
    

Однак деякі поля календаря потребують додаткових дій, таких як відкриття спливаючого календаря і вибору дати.

7. Файлові поля (File Upload)

Ці поля дозволяють завантажувати файли на сервер. Взаємодіяти з ними можна також через метод send_keys(), вказавши шлях до файлу на локальному комп'ютері.

Python

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

8. Приховані поля (Hidden Fields)

Приховані поля не відображаються на сторінці, але можуть використовуватися для зберігання інформації, необхідної для відправки форми. Взаємодіяти з ними можна, тільки якщо у вас є доступ до їх значення (наприклад, для перевірки чи зміни значення).

Python

hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("Hidden field value:", value)
    

9. Перевірка успішності виконання дій

Отримання даних про виконання дій — твій барометр успіху. Після відправки форми ти, звичайно, хочеш переконатися, що заявка успішно прийнята, чи не так? Ось як це можна зробити:

Python

># Перевірка успішної авторизації на сайті
if "Ласкаво просимо" in driver.page_source:
    print("Авторизація пройшла успішно!")
else:
    print("Сталася помилка під час авторизації.")
    

10. Проблеми та рішення

Проблеми

  • Нестабільність роботи: Веб-сторінки часто змінюються. Зміна структури сторінки може призвести до збоїв у скриптах, тому регулярна перевірка коду на актуальність необхідна.
  • Залежність від швидкості мережі: Час завантаження сторінок і елементів може відрізнятися. Використовуйте явні очікування (explicit waits) для обробки затримок.

Рішення

  • Логування: Ведіть лог усіх дій, щоб краще розбиратися в проблемах. Використання бібліотеки logging значно спростить ведення логів.
  • Модульність коду: Розділяйте складні дії на функції та модулі, щоб легше вносити зміни і тестувати їх.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ