
Недавно мне нужно было автоматизировать тестовый вход на сайт: ввести email, пароль и нажать «Войти». Первое, что пришло в голову — вручную эмулировать нажатия. Но потом я вспомнил Playwright — и за 7 строк кода всё заработало.
С тех пор я использую его для парсинга, тестирования и даже автоматизации рутинных задач в браузере. В этой статье покажу пошагово, как:
- Найти поля ввода и кнопки
- Заполнить форму с
page.fill() - Нажать кнопку с
page.click() - Дождаться появления элемента, чтобы избежать ошибок
Всё — на реальном демо-сайте, без «вымышленных» примеров.
Оглавление
Почему Playwright — лучший выбор для автоматизации форм?
Playwright от Microsoft — современная библиотека, которая:
- Поддерживает Chromium, Firefox и WebKit
- Имеет встроенные ожидания (никаких
time.sleep()) - Позволяет легко находить элементы по селекторам, placeholder’ам, тексту
- Работает с динамическими сайтами (React, Vue и т.д.)
И главное — работает на Python, а не только на JavaScript.
📚 Документация: Playwright Python API
Подготовка: установка и запуск
Установите Playwright:
pip install playwright
playwright install chromium
Создайте скрипт form_auto.py.
Шаг 1. Выбор демо-сайта для практики
Для примера мы будем использовать официальный тестовый сайт:
👉 https://demoqa.com/text-box
Там есть:
- Поле «Full Name»
- Поле «Email»
- Кнопка «Submit»
Идеально для примера!
Шаг 2. Заполнение формы и клик по кнопке
Базовый скрипт
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, slow_mo=200)
page = browser.new_page()
page.goto("https://demoqa.com/text-box")
# Заполняем поля
page.fill("#userName", "Иван Петров")
page.fill("#userEmail", "ivan@example.com")
# Нажимаем кнопку
page.click("#submit")
# Делаем скриншот результата
page.screenshot(path="form_result.png")
browser.close()
✅ Готово! Вы увидите, как браузер сам заполняет форму и кликает.
Как найти селектор элемента на любой странице (инструкция для новичков)
Чтобы автоматизировать форму, нужно знать, как именно обратиться к нужному полю или кнопке. Playwright позволяет это делать через селекторы — специальные строки вроде #userName, .btn-submit или input[name='email'].
Вот как найти их вручную:
Шаг 1. Откройте сайт в браузере
Например: https://demoqa.com/text-box
Шаг 2. Наведите курсор на нужный элемент
— Это может быть поле ввода, кнопка, чекбокс и т.д.
Шаг 3. Нажмите ПКМ → «Просмотреть код»
(Или просто откройте DevTools клавишей F12, затем нажмите иконку «курсор» в левом верхнем углу и кликните по элементу на странице.)
Шаг 4. В коде вы увидите что-то вроде:
<input type="text" id="userName" placeholder="Full Name">
Здесь есть несколько полезных атрибутов:
| АТРИБУТ | СЕЛЕКТОР В PLAYWRIGHT | КОГДА ИСПОЛЬЗОВАТЬ |
| id=»userName» | «#userName» | Лучший вариант— ID уникален |
| class=»form-control» | «.form-control» | Если ID нет, но класс описательный |
| placeholder=»Full Name» | «input[placeholder=’Full Name’]» | Если поле отличается только по placeholder |
| Текст кнопки «Submit» | «text=’Submit'» | Для кнопок с понятным текстом |
💡 Playwright поддерживает CSS-селекторы, XPath, а также собственные селекторы по тексту и атрибутам.
Шаг 5. Проверьте селектор в консоли (опционально)
В DevTools перейдите во вкладку Console и введите:
document.querySelector("#userName")
Если в ответе появился элемент — селектор правильный.
Советы для сложных случаев
- Если ID динамический (меняется при каждой загрузке, например
input_123abc) — ищите поplaceholder,name, родительскому блоку или тексту рядом. - Если несколько элементов с одинаковым классом — уточните путь:
page.fill("form#login-form input[name='email']", "test@example.com")
- Используйте
page.locator()для сложной логики (Playwright v1.20+):
page.locator("input", has_text="Email").fill("test@example.com")
📚 Подробнее: Playwright — Selectors
Шаг 3. Надёжная автоматизация: ожидание элементов
Если сайт грузится медленно, page.fill() может вызвать ошибку.
Решение — дождаться появления элемента:
page.wait_for_selector("#userName", timeout=10000)
page.fill("#userName", "Анна Сидорова")
⏱️
timeout=10000— ждать до 10 секунд. Если элемент не появится — будет исключение.
Другие полезные методы
Заполнение по placeholder
page.fill("input[placeholder='name@example.com']", "test@domain.com")
Клик по тексту кнопки
page.click("text='Submit'")
Проверка результата (например, появилось ли сообщение)
page.wait_for_selector("#output")
print("✅ Форма успешно отправлена!")
Практическое применение
Вы можете использовать это для:
- Автоматического входа в личный кабинет
- Тестирования UI-форм
- Парсинга сайтов с авторизацией
- Отправки отчётов через веб-интерфейс
Пример: ежедневная загрузка данных через форму — без участия человека.
Советы для стабильной работы
- Всегда используйте
wait_for_selector()перед взаимодействием - В разработке —
headless=False, в продакшене —headless=True - Храните селекторы в константах, если скрипт растёт
- Добавьте обработку ошибок через
try/except
Заключение
Теперь вы умеете:
✅ Находить поля и кнопки
✅ Заполнять формы с page.fill()
✅ Кликает по элементам с page.click()
✅ Делать это надёжно, с ожиданием загрузки
Playwright превращает рутинные действия в браузере в автоматизированные скрипты, которые работают мгновенно и без ошибок.
🐍 Попробуйте запустить пример выше — и вы убедитесь, насколько это просто.
Если что-то осталось непонятным — пишите в комментариях! С радостью уточню, дополню или помогу с вашим кодом.
А чтобы не пропустить новые простые и полезные гайды по Python, автоматизации и разработке — подписывайтесь на мой Telegram-канал: PythonAuto 🐍
Ваш интерес — лучшая мотивация для новых статей!