Перейти к содержимому

Справочник по API

Это полный справочник по API автоматизации Santiago — набору эндпоинтов, которые локальный демон предоставляет для управления запущенным профилем браузера. Каждый эндпоинт управляет реальной страницей на базе Playwright внутри антидетект-браузера, поэтому к каждому действию применяются те же отпечаток и прокси, которые вы настроили для профиля.

Об установке и общем использовании см. Основы HTTP API и Лучшие практики. Готовые сквозные сценарии описаны в руководствах по автоматизации.

Все эндпоинты автоматизации находятся на локальном демоне и нацелены на один запущенный профиль по его id:

http://localhost:7891/api/automation/:profileId/<action>

Демон слушает только http://localhost:7891. Замените :profileId на id запущенного профиля — сначала запустите его (см. Запуск профилей для автоматизации). Вызовы к не запущенному профилю возвращают 404 PROFILE_NOT_RUNNING.

Каждый эндпоинт возвращает одну и ту же оболочку.

Success
{ "ok": true, "data": { ... } }
Error
{ "ok": false, "error": { "code": "ERROR_CODE", "message": "..." } }

Действия, которые только успешны или неуспешны (click, hover, type, движения мыши и т. д.), возвращают { "ok": true } без data. Эндпоинты, производящие значение (snapshot, screenshot, navigate, tabs, evaluate, dialog), заполняют data.

КонстантаЗначениеПрименяется к
Тайм-аут навигации30сnavigate, back, forward, reload, открытие вкладки с URL
Тайм-аут действияЭндпоинты взаимодействия (click, hover, type, select-option, scroll-to, скриншоты элемента)
Тайм-аут ожидания15с (по умолчанию)Эндпоинт wait; переопределяется полем timeout
МетодПутьКлючевые параметрыНазначение
POST/:profileId/navigateurl (обязательный)Перейти по URL.
POST/:profileId/backнетВернуться назад в истории.
POST/:profileId/forwardнетПерейти вперёд в истории.
POST/:profileId/reloadнетПерезагрузить текущую страницу.

Все четыре возвращают { ok, data: { url, title } } с итоговым URL и заголовком страницы.

Navigate to a URL
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/navigate \
-H 'Content-Type: application/json' \
-d '{"url": "https://example.com"}'
Response
{ "ok": true, "data": { "url": "https://example.com/", "title": "Example Domain" } }
МетодПутьКлючевые параметрыНазначение
POST/:profileId/snapshotselector, depthЗахватить дерево доступности страницы и получить ссылки на элементы.
POST/:profileId/screenshotfullPage, ref, selectorСделать скриншот в формате PNG в кодировке base64.

Захватить дерево доступности текущей страницы. Это основной способ «увидеть» структуру страницы и получить id вида [ref=eN] для последующих действий.

ПолеТипПо умолчаниюОписание
selectorstringCSS-селектор для ограничения снимка одним поддеревом элемента
depthnumberОграничить глубину дерева
Snapshot the page
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/snapshot \
-H 'Content-Type: application/json' \
-d '{}'
Response
{ "ok": true, "data": { "snapshot": "- heading \"Example\" [ref=e1]\n- textbox \"Email\" [ref=e2]\n..." } }

Сделать скриншот. Возвращает строку PNG в кодировке base64. Укажите ref или selector, чтобы захватить один элемент; иначе захватывается область просмотра (или вся страница).

ПолеТипПо умолчаниюОписание
fullPagebooleanfalseЗахватить всю прокручиваемую страницу (игнорируется, если задан ref/selector)
refstringСкриншот конкретного элемента по ref
selectorstringСкриншот конкретного элемента по CSS-селектору
Response
{ "ok": true, "data": { "screenshot": "iVBORw0KGgo..." } }

Все эндпоинты взаимодействия ниже принимают либо ref (из снимка), либо selector (CSS); требуется хотя бы один.

МетодПутьКлючевые параметрыНазначение
POST/:profileId/clickref/selector, button, doubleClick, modifiersКликнуть по элементу.
POST/:profileId/hoverref/selectorНавести курсор на элемент.
POST/:profileId/dragstartRef/startSelector, endRef/endSelectorПеретащить от одного элемента к другому.
POST/:profileId/scroll-toref/selectorПрокрутить элемент в зону видимости.
ПолеТипПо умолчаниюОписание
refstringRef элемента из снимка
selectorstringCSS-селектор
button"left" | "right" | "middle""left"Кнопка мыши
doubleClickbooleanfalseДвойной клик
modifiersstring[]"Alt", "Control", "ControlOrMeta", "Meta", "Shift"
Click by ref
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/click \
-H 'Content-Type: application/json' \
-d '{"ref": "e20"}'
ПолеТипОписание
refstringRef элемента
selectorstringCSS-селектор

Перетащить от исходного элемента к целевому. Каждая сторона принимает ref или селектор.

ПолеТипОписание
startRefstringRef исходного элемента
startSelectorstringCSS-селектор источника
endRefstringRef целевого элемента
endSelectorstringCSS-селектор цели

Прокрутить элемент в зону видимости.

ПолеТипОписание
refstringRef элемента
selectorstringCSS-селектор

Два эндпоинта покрывают два вида выпадающих списков, которые встречаются в вебе: нативные элементы <select> и пользовательские виджеты ARIA combobox.

МетодПутьКлючевые параметрыНазначение
POST/:profileId/select-optionref/selector, values (обязательный)Выбрать опцию(и) в нативном <select>.
POST/:profileId/select-comboboxref/selector, value (обязательный), optionSelectorУмный выбор для пользовательских выпадающих списков ARIA combobox.

Выбрать опцию(и) в нативном элементе <select>.

ПолеТипОбязательныйОписание
ref / selectorstringдаЦелевой элемент <select>
valuesstring[]даЗначения для выбора
Response
{ "ok": true, "data": { "selected": ["value1"] } }

Умный выбор для выпадающих списков ARIA combobox — пользовательских виджетов <div role="combobox">, используемых многими современными веб-приложениями. Он выполняет всю последовательность: клик для открытия, чтение aria-controls для поиска listbox, ожидание появления listbox (5с), поиск [role="option"], соответствующего value (или вашему optionSelector), и клик по нему.

ПолеТипОбязательныйОписание
ref / selectorstringдаЦелевой элемент combobox
valuestringдаТекст опции для выбора
optionSelectorstringПользовательский CSS-селектор для опции (переопределяет сопоставление по тексту)
Select a custom-dropdown option
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/select-combobox \
-H 'Content-Type: application/json' \
-d '{"ref": "e5", "value": "March"}'
Response
{ "ok": true, "data": { "selected": "March" } }
МетодПутьКлючевые параметрыНазначение
POST/:profileId/typeref/selector, text (обязательный)Очистить поле и ввести значение (с человекоподобной задержкой между клавишами).
POST/:profileId/press-sequentiallyref/selector, text (обязательный), delayВвести текст клавиша за клавишей без предварительной очистки.
POST/:profileId/press-keykey (обязательный), modifiersНажать клавишу или сочетание клавиш.
POST/:profileId/fill-formfields (обязательный)Заполнить несколько полей за один раз (на основе ref/selector).
POST/:profileId/fill-pagefields, submit, waitAfterSubmitВысокоуровневое заполнение формы на основе координат + опциональная отправка.

Сфокусировать поле, очистить его текущее значение, затем ввести новое значение с человекоподобной задержкой между клавишами.

ПолеТипОбязательныйОписание
ref / selectorstringдаЦелевой элемент ввода
textstringдаТекст для ввода
Type into a field
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/type \
-H 'Content-Type: application/json' \
-d '{"ref": "e2", "text": "jane.doe@example.com"}'

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

ПолеТипПо умолчаниюОписание
ref / selectorstringобязательныйЦелевой элемент
textstringобязательныйТекст для ввода
delaynumber50Задержка между клавишами в мс

Нажать одну клавишу клавиатуры или сочетание. С modifiers демон объединяет их в аккорд (например, Control+a).

ПолеТипОписание
keystringИмя клавиши: "Enter", "Tab", "Escape", "a", "F1" и т. д.
modifiersstring[]"Alt", "Control", "ControlOrMeta", "Meta", "Shift"
Submit a form with Enter
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/press-key \
-H 'Content-Type: application/json' \
-d '{"key": "Enter"}'

Заполнить несколько полей формы за один вызов. Каждое поле заполняется через локатор Playwright (клик, очистка, ввод); если это не удаётся, демон переходит к стратегии на основе координат (определить ограничивающий прямоугольник, кликнуть по центру, выделить всё, удалить, ввести). Результат каждого поля сообщает использованную strategy (locator или coords).

ПолеТипОбязательныйОписание
fieldsarrayда[{ ref?, selector?, value }]
Fill several fields
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/fill-form \
-H 'Content-Type: application/json' \
-d '{
"fields": [
{"ref": "e2", "value": "Jane Doe"},
{"selector": "#email", "value": "jane@example.com"}
]
}'
Response
{
"ok": true,
"data": {
"results": [
{ "ref": "e1", "ok": true },
{ "selector": "#email", "ok": true },
{ "ref": "e3", "ok": false, "error": "Element not found" }
]
}
}

Высокоуровневое заполнение на основе координат, полностью обходящее локаторы Playwright (evaluate для поиска центров, затем мышь + клавиатура). Один вызов может заполнить целую форму, выбрать значения в combobox и кликнуть отправку — заменяя множество обращений. Combobox-ы открываются, кликается соответствующая опция, и выбор проверяется (с одной автоматической повторной попыткой).

ПолеТипПо умолчаниюОписание
fieldsarrayМассив объектов полей (см. ниже)
submitobject{ selector?, text? } кнопка отправки (сначала selector, затем запасной вариант по text)
waitAfterSubmitnumber2000Миллисекунды ожидания после клика по отправке

Каждая запись в fields:

ПолеТипПо умолчаниюОписание
selectorstringобязательныйCSS-селектор для элемента
valuestringобязательныйЗначение для ввода или текст опции для выбора
type"text" | "combobox""text"Вид поля
nthnumber0Индекс с отсчётом от 0, когда селектор совпадает с несколькими элементами
optionSelectorstringli[role=option]CSS для элементов опций (только для combobox)

Требуется хотя бы одно из fields или submit (иначе 400 BAD_REQUEST).

Fill and submit a form in one call
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/fill-page \
-H 'Content-Type: application/json' \
-d '{
"fields": [
{"selector": "#firstName", "value": "Jane"},
{"selector": "#month", "value": "March", "type": "combobox"}
],
"submit": {"text": "Submit"},
"waitAfterSubmit": 3000
}'
Response
{
"ok": true,
"data": {
"results": [
{ "selector": "#firstName", "type": "text", "ok": true },
{ "selector": "#month", "type": "combobox", "ok": true, "selectedValue": "March" }
],
"submit": { "ok": true, "url": "https://example.com/welcome" }
}
}

Низкоуровневое управление мышью по координатам области просмотра. Используйте это, когда взаимодействие на основе локатора заблокировано или ненадёжно.

МетодПутьКлючевые параметрыНазначение
POST/:profileId/mouse/movex, y (обязательные)Переместить курсор в точку.
POST/:profileId/mouse/clickx, y (обязательные), buttonКликнуть в точке.
POST/:profileId/mouse/downbuttonНажать кнопку мыши.
POST/:profileId/mouse/upbuttonОтпустить кнопку мыши.
POST/:profileId/mouse/wheeldeltaX, deltaYПрокрутить колесо.
ПолеТипОбязательный
xnumberда
ynumberда
ПолеТипПо умолчанию
xnumberобязательный
ynumberобязательный
button"left" | "right" | "middle""left"
ПолеТипПо умолчанию
button"left" | "right" | "middle""left"
ПолеТипПо умолчаниюОписание
deltaXnumber0Горизонтальная прокрутка
deltaYnumber0Вертикальная прокрутка (положительное = вниз)
Click at a coordinate
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/mouse/click \
-H 'Content-Type: application/json' \
-d '{"x": 480, "y": 320}'
МетодПутьКлючевые параметрыНазначение
GET/:profileId/tabsнетСписок открытых вкладок.
POST/:profileId/tabs/newurlОткрыть новую вкладку (пустую, если url не указан).
POST/:profileId/tabs/selectindex (обязательный)Переключиться на вкладку по индексу.
POST/:profileId/tabs/closeindexЗакрыть вкладку (по умолчанию последнюю; нельзя закрыть единственную оставшуюся вкладку).
List tabs
curl http://localhost:7891/api/automation/$PROFILE_ID/tabs
Response
{ "ok": true, "data": { "tabs": [{ "index": 0, "url": "https://...", "title": "..." }] } }
ПолеТипПо умолчаниюОписание
urlstringURL для открытия (пустая вкладка, если не указан)

Возвращает { ok, data: { index, url, title } }.

ПолеТипОбязательный
indexnumberда

Возвращает { ok, data: { index, url, title } }. Индекс вне диапазона возвращает 400 BAD_REQUEST.

ПолеТипПо умолчаниюОписание
indexnumberпоследняя вкладкаИндекс вкладки для закрытия

Возвращает { ok, data: { closedIndex } }. Закрытие единственной оставшейся вкладки возвращает 400 LAST_TAB — вместо этого остановите профиль.

МетодПутьКлючевые параметрыНазначение
POST/:profileId/evaluatecode (обязательный)Выполнить JavaScript в контексте страницы и вернуть результат.
ПолеТипОбязательный
codestringда
Read the document title from the page
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/evaluate \
-H 'Content-Type: application/json' \
-d '{"code": "document.title"}'
Response
{ "ok": true, "data": { "result": "Example Domain" } }
МетодПутьКлючевые параметрыНазначение
POST/:profileId/waittext, selector, state, timeoutЖдать состояния элемента/текста или фиксированное время.

Если вы передаёте selector или text, вызов ждёт, пока этот элемент достигнет состояния state. Если не передаёте ни того, ни другого, он просто ждёт timeout миллисекунд.

ПолеТипПо умолчаниюОписание
textstringЖдать появления этого текста
selectorstringЖдать этот CSS-селектор
state"visible" | "hidden" | "attached" | "detached""visible"Целевое состояние
timeoutnumber15000Тайм-аут в мс. Без text/selector ждёт это время безусловно
Wait for an element to appear
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/wait \
-H 'Content-Type: application/json' \
-d '{"selector": "#dashboard", "state": "visible", "timeout": 20000}'
МетодПутьКлючевые параметрыНазначение
POST/:profileId/dialogaction (обязательный), promptTextПринять или отклонить ожидающий alert/confirm/prompt.

Демон отслеживает нативные диалоги (alert, confirm, prompt) по профилю по мере их открытия. Вызовите этот эндпоинт, чтобы обработать самый старый из ожидающих.

ПолеТипОбязательныйОписание
action"accept" | "dismiss"даПринять или отклонить диалог
promptTextstringТекст для ввода в диалогах prompt (используется при accept)
Response
{ "ok": true, "data": { "type": "confirm", "message": "Are you sure?", "defaultValue": "" } }

Если ожидающего диалога нет, вызов возвращает 404 NO_DIALOG.

МетодПутьКлючевые параметрыНазначение
POST/:profileId/batchactions (обязательный)Выполнить несколько действий за один HTTP-вызов с человекоподобным темпом.

Выполнить несколько действий последовательно за один запрос. Демон вставляет случайную задержку 80–250мс между действиями для человекоподобного темпа. Он останавливается на первой ошибке — оставшиеся действия пропускаются (поэтому они никогда не выполняются на устаревшем состоянии).

Type, select, then click in one call
curl -X POST http://localhost:7891/api/automation/$PROFILE_ID/batch \
-H 'Content-Type: application/json' \
-d '{
"actions": [
{"action": "type", "ref": "e1", "text": "Jane Doe"},
{"action": "select-combobox", "ref": "e5", "value": "March"},
{"action": "click", "ref": "e20"}
]
}'

Доступные действия и поля, которые использует каждое (те же, что и у соответствующего отдельного эндпоинта):

ДействиеПоля
clickref/selector, button, doubleClick, modifiers
typeref/selector, text
press-sequentiallyref/selector, text, delay
press-keykey, modifiers
select-optionref/selector, values
select-comboboxref/selector, value, optionSelector
hoverref/selector
scroll-toref/selector
waittext, selector, state, timeout
navigateurl
snapshotselector, depth
screenshotref, selector, fullPage
evaluatecode
Response
{
"ok": true,
"data": {
"results": [
{ "index": 0, "action": "type", "ok": true },
{ "index": 1, "action": "select-combobox", "ok": true, "data": { "selected": "March" } },
{ "index": 2, "action": "click", "ok": true }
]
}
}

Пустой массив actions возвращает 400 BAD_REQUEST.

КодКогда
PROFILE_NOT_RUNNINGУказанный id профиля не является запущенным профилем (HTTP 404).
BAD_REQUESTОтсутствуют обязательные поля тела запроса или индекс вкладки вне диапазона (HTTP 400).
LAST_TABПопытка закрыть единственную оставшуюся вкладку (HTTP 400).
NO_DIALOGdialog вызван без ожидающего диалога (HTTP 404).
NAVIGATE_FAILEDnavigate / back / forward / reload завершились с ошибкой.
SNAPSHOT_FAILED / SCREENSHOT_FAILEDСнимок или скриншот завершились с ошибкой.
CLICK_FAILED / HOVER_FAILED / DRAG_FAILED / SCROLL_FAILEDСоответствующее взаимодействие завершилось с ошибкой (часто тайм-аут действия в 2с).
SELECT_FAILED / SELECT_COMBOBOX_FAILEDВыбор в выпадающем списке завершился с ошибкой.
TYPE_FAILED / PRESS_SEQ_FAILED / KEY_PRESS_FAILED / FILL_FORM_FAILED / FILL_PAGE_FAILEDВвод текста завершился с ошибкой.
MOUSE_FAILEDКоординатное действие мышью завершилось с ошибкой.
TABS_FAILED / TAB_NEW_FAILED / TAB_SELECT_FAILED / TAB_CLOSE_FAILEDДействие со вкладкой завершилось с ошибкой.
EVALUATE_FAILEDСкрипт страницы выбросил исключение.
WAIT_FAILEDУсловие ожидания завершилось по тайм-ауту.
DIALOG_FAILEDОбработка диалога завершилась с ошибкой.
BATCH_FAILEDПакетный запрос не удалось выполнить (например, профиль не запущен).