Заполнение форм
Заполнить форму и отправить её — самая частая задача автоматизации. Это руководство показывает сценарий, который работает на большинстве страниц, включая анимированные формы и кастомные выпадающие списки. Каждое действие выполняется через доверенные, гуманизированные события внутри антидетект-браузера профиля, поэтому форма видит реального пользователя.
Во всех примерах предполагается запущенный профиль, чей id находится в $PROFILE (см. Запуск профилей), и базовый адрес автоматизации http://localhost:7891/api/automation/$PROFILE.
Сценарий
Заголовок раздела «Сценарий»- Перейдите на страницу.
- Снимите снапшот, чтобы увидеть поля и их селекторы.
- Заполните страницу — задайте все поля и отправьте форму одним вызовом.
- Снимите снапшот заново, только если отправка загрузила новую страницу или шаг.
curl -s localhost:7891/api/automation/$PROFILE/navigate -X POST \ -H 'Content-Type: application/json' -d '{"url":"https://example.com/signin"}'curl -s localhost:7891/api/automation/$PROFILE/snapshot -X POST | jq -r .data.snapshotСнапшот — это дерево доступности с id [ref=eN] для каждого элемента, а также с ролями и метками. Используйте его для выбора селекторов.
fill-page — основной эндпоинт
Заголовок раздела «fill-page — основной эндпоинт»fill-page заполняет все поля и отправляет форму одним запросом. Он кликает и печатает по реальным координатам, поэтому работает на анимированных страницах, где обычные локаторы упираются в таймаут, и обрабатывает выпадающие списки с автоповтором.
curl -s localhost:7891/api/automation/$PROFILE/fill-page -X POST \ -H 'Content-Type: application/json' -d '{ "fields": [ {"selector": "#email", "value": "user@example.com"}, {"selector": "#password", "value": "s3cret"}, {"selector": "[role=combobox]", "value": "English", "type": "combobox"} ], "submit": {"text": "Sign in"}, "waitAfterSubmit": 2000 }'Параметры поля:
| Параметр | Значение |
|---|---|
selector / ref | Элемент для заполнения. ref берётся из снапшота; selector — это CSS-селектор. |
type | "text" (по умолчанию) или "combobox" для ARIA-выпадающих списков. |
nth | Когда селектор совпадает с несколькими видимыми элементами, выбирает N-й (отсчёт с 0). |
value | Текст для ввода или метка опции для выбора. |
submit кликает по подходящей кнопке; waitAfterSubmit (мс) ждёт, пока следующая страница устаканится, прежде чем вернуть ответ.
Когда использовать другие эндпоинты
Заголовок раздела «Когда использовать другие эндпоинты»| Эндпоинт | Для чего использовать |
|---|---|
fill-page | По умолчанию для любой формы — текстовые поля, выпадающие списки и отправка одним вызовом. |
batch | Не-формовые последовательности — клики по ссылкам, наведение, навигация, ожидание — или действия по ref из снапшота. |
fill-form | Простые формы на «послушных» страницах; сначала пробует локатор, затем переходит к координатам. |
Выпадающие списки
Заголовок раздела «Выпадающие списки»- Нативный
<select>(отображается какselectв снапшоте) →select-optionсо значениями опций. - ARIA combobox (роль
combobox) → задайтеtype: "combobox"вfill-pageили вызовитеselect-combobox. - Отсоединённые оверлеи — некоторые сайты отрисовывают список опций вне combobox. Если
select-comboboxупирается в таймаут, не повторяйте его. Откройте выпадающий список реальнымclick, считайте координаты опции черезevaluate(только чтение), затем кликните по ним черезmouse/click:
# open the dropdowncurl -s localhost:7891/api/automation/$PROFILE/click -X POST -d '{"ref":"e12"}'# read the option's center (evaluate is read-only)curl -s localhost:7891/api/automation/$PROFILE/evaluate -X POST -d '{"code":"const o=[...document.querySelectorAll(\"li[role=option]\")].find(e=>e.textContent.trim()===\"English\"); const r=o.getBoundingClientRect(); JSON.stringify({x:r.x+r.width/2,y:r.y+r.height/2})"}'# click the coordinates (trusted, humanized)curl -s localhost:7891/api/automation/$PROFILE/mouse/click -X POST -d '{"x":512,"y":340}'Часто проще клавиатурный type-ahead: откройте combobox, затем через press-key наберите первые буквы опции и Enter, чтобы подтвердить.
Сложные случаи
Заголовок раздела «Сложные случаи»- Анимированные формы — поля двигаются во время CSS-переходов, поэтому локаторы сообщают «not stable».
fill-pageобходит это вводом по координатам. Таймаут действия короткий (2 с), поэтому неверный путь падает быстро. - Кнопка отправки за пределами экрана — если кнопка отправки ниже видимой области, перейдите к ней клавишей
Tabиз последнего поля и нажмитеEnterлибо считайте её координаты и сделайтеmouse/click. - Многошаговые формы — один
fill-pageна шаг, сwaitAfterSubmit, затем снимайте снапшот следующего шага заново. Перезагружайте страницу между шагами, если после неё остаётся устаревший DOM.
См. также
Заголовок раздела «См. также»- Лучшие практики — правила скрытности и темпа, на которые опираются эти сценарии.
- Справочник API — каждый эндпоинт и параметр.
- Управление несколькими профилями — запуск одного и того же сценария на множестве профилей.