1. Технічні основи
Заповнення та відправка форм
Робота з формами часто потрібна для автоматизації реєстрації користувачів, заповнення анкет, збору даних і багато іншого. Коли тобі потрібно заповнити сотні форм, вручну це зробити — ніби спробувати з’їсти кавун через соломинку. А нашими суперздатностями з Selenium ми зробимо це за кілька секунд.
Давай спочатку розберемо, як ми можемо заповнювати текстові поля і відправляти форми. На прикладі типової форми входу на сайт ми вивчимо основні кроки:
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 для перехоплення помилок і ведемо логи, щоб розібратися, що пішло не так.
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().
checkbox = driver.find_element_by_id("checkbox_id")
if not checkbox.is_selected():
checkbox.click()
3. Перемикачі (Radio Buttons)
Перемикачі дозволяють вибирати тільки одну опцію з декількох. Працювати з ними можна як з прапорцями: вибирати опцію за допомогою методу click() і перевіряти стан за допомогою is_selected().
radio_button = driver.find_element_by_id("radio_button_id")
if not radio_button.is_selected():
radio_button.click()
4. Випадаючі списки (Dropdowns)
Випадаючі списки містять кілька варіантів на вибір. У Selenium є клас Select, який надає методи для роботи з такими списками.
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)
Текстові області схожі на текстові поля, але зазвичай використовуються для введення великого обсягу тексту. Робота з ними ідентична роботі з текстовими полями.
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() для введення значення у потрібному форматі.
date_field = driver.find_element_by_id("date_field_id")
date_field.send_keys("2023-12-25") # Формат дати може варіюватися залежно від сайту
Однак деякі поля календаря потребують додаткових дій, таких як відкриття спливаючого календаря і вибору дати.
7. Файлові поля (File Upload)
Ці поля дозволяють завантажувати файли на сервер. Взаємодіяти з ними можна також через метод send_keys(), вказавши шлях до файлу на локальному комп'ютері.
file_input = driver.find_element_by_id("file_upload_id")
file_input.send_keys("/path/to/file.txt")
8. Приховані поля (Hidden Fields)
Приховані поля не відображаються на сторінці, але можуть використовуватися для зберігання інформації, необхідної для відправки форми. Взаємодіяти з ними можна, тільки якщо у вас є доступ до їх значення (наприклад, для перевірки чи зміни значення).
hidden_field = driver.find_element_by_id("hidden_field_id")
value = hidden_field.get_attribute("value")
print("Hidden field value:", value)
9. Перевірка успішності виконання дій
Отримання даних про виконання дій — твій барометр успіху. Після відправки форми ти, звичайно, хочеш переконатися, що заявка успішно прийнята, чи не так? Ось як це можна зробити:
># Перевірка успішної авторизації на сайті
if "Ласкаво просимо" in driver.page_source:
print("Авторизація пройшла успішно!")
else:
print("Сталася помилка під час авторизації.")
10. Проблеми та рішення
Проблеми
- Нестабільність роботи: Веб-сторінки часто змінюються. Зміна структури сторінки може призвести до збоїв у скриптах, тому регулярна перевірка коду на актуальність необхідна.
- Залежність від швидкості мережі: Час завантаження сторінок і елементів може відрізнятися. Використовуйте явні очікування (explicit waits) для обробки затримок.
Рішення
- Логування: Ведіть лог усіх дій, щоб краще розбиратися в проблемах. Використання бібліотеки
loggingзначно спростить ведення логів. - Модульність коду: Розділяйте складні дії на функції та модулі, щоб легше вносити зміни і тестувати їх.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ