Topic 6 of 6

Course materials are currently available in Russian only.

Автозаполнение формы

Соберём всё вместе: программа сама заполнит форму регистрации, отправит её и проверит, что ответил сайт.

Заполнение по словарю

data = {"name": "Аня", "email": "anya@mail.ru", "age": "15"}

for name, value in data.items():
    fields = driver.find_elements(By.NAME, name)
    if not fields:
        continue                           # такого поля нет — пропускаем
    fields[0].clear()
    fields[0].send_keys(value)
  • поля ищут по name — он стабильнее классов и id, его использует сам сайт при отправке;
  • поле очищают перед вводом — в нём могло остаться значение;
  • find_elements вместо find_element позволяет спокойно пропустить отсутствующее поле.

Переключатели и списки

driver.find_element(By.CSS_SELECTOR, "input[name=gender][value=f]").click()
Select(driver.find_element(By.NAME, "plan")).select_by_visible_text("Премиум")

Отправка и результат

После нажатия кнопки сайт может ответить по-разному — успехом или ошибками. Ждут любого из вариантов, а потом смотрят, какой случился:

WebDriverWait(driver, 5).until(
    lambda d: d.find_elements(By.ID, "success") or d.find_elements(By.CSS_SELECTOR, ".error")
)
if driver.find_elements(By.ID, "success"):
    print("Готово!")
else:
    print([e.text for e in driver.find_elements(By.CSS_SELECTOR, ".error")])

Ответственность

Автоматизируйте только то, на что у вас есть право: свои аккаунты, свои сайты, рабочие задачи. Многие сайты запрещают роботов в правилах и защищаются капчами; обходить такую защиту нельзя. Не отправляйте формы слишком часто — это нагрузка на чужой сервер.

Что дальше

  • Тестирование своих сайтов: Selenium + pytest проверяют, что после каждого изменения регистрация, корзина и оплата работают;
  • Page Object — класс на каждую страницу сайта с методами login(), search(): тесты становятся короче и понятнее;
  • Playwright — более новая библиотека с похожими идеями и встроенными ожиданиями.

Итог

  • заполнение по словарю: find_elements(By.NAME, …), clear(), send_keys();
  • переключатели — клик по [name=…][value=…], списки — Select;
  • после отправки — ждать успеха или ошибок и прочитать результат;
  • автоматизировать — только с разрешения.