Перейти до вмісту

Довідник API

Це повний довідник API автоматизації Santiago: набір ендпоінтів, які локальний демон надає для керування запущеним профілем браузера. Кожен ендпоінт керує реальною сторінкою на базі Playwright усередині антидетект-браузера, тож той самий відбиток і проксі, які ви налаштували для профілю, застосовуються до кожної дії.

Про налаштування та загальне використання дивіться Основи HTTP API та Найкращі практики. Готові наскрізні сценарії дивіться у посібниках з автоматизації.

Базовий URL і домовленості

Section titled “Базовий URL і домовленості”

Усі ендпоінти автоматизації працюють через локальний демон і спрямовані на один запущений профіль за його 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
Таймаут дії2 сЕндпоінти взаємодії (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 (зі snapshot), або selector (CSS); потрібен принаймні один.

МетодШляхКлючові параметриПризначення
POST/:profileId/clickref/selector, button, doubleClick, modifiersКлікнути по елементу.
POST/:profileId/hoverref/selectorНавести курсор на елемент.
POST/:profileId/dragstartRef/startSelector, endRef/endSelectorПеретягнути й відпустити між двома елементами.
POST/:profileId/scroll-toref/selectorПрокрутити сторінку так, щоб елемент став видимим.
ПолеТипЗа замовчуваннямОпис
refstringПосилання на елемент зі snapshot
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"}'
ПолеТипОпис
refstringПосилання на елемент
selectorstringCSS-селектор

Перетягнути від елемента-джерела до цільового елемента. Кожна сторона приймає ref або селектор.

ПолеТипОпис
startRefstringПосилання на елемент-джерело
startSelectorstringCSS-селектор джерела
endRefstringПосилання на цільовий елемент
endSelectorstringCSS-селектор цілі

Прокрутити сторінку так, щоб елемент став видимим.

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

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

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

Вибрати опцію(ї) в нативному елементі <select>.

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

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

ПолеТипОбов’язковийОпис
ref / selectorstringтакЦільовий елемент комбобокса
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" } }

Введення тексту та клавіатура

Section titled “Введення тексту та клавіатура”
МетодШляхКлючові параметриПризначення
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 для пошуку центрів, потім миша + клавіатура). Один виклик може заповнити цілу форму, вибрати комбобокси та клікнути кнопку надсилання — замінюючи багато звернень. Комбобокси відкриваються, клікається відповідна опція, а вибір перевіряється (з однією автоматичною повторною спробою).

ПолеТипЗа замовчуваннямОпис
fieldsarrayМасив об’єктів полів (дивіться нижче)
submitobject{ selector?, text? } кнопка надсилання (спершу selector, потім запасний варіант text)
waitAfterSubmitnumber2000Мілісекунди очікування після кліку надсилання

Кожен запис у fields:

ПолеТипЗа замовчуваннямОпис
selectorstringобов’язковийCSS-селектор елемента
valuestringобов’язковийЗначення для введення або текст опції для вибору
type"text" | "combobox""text"Вид поля
nthnumber0Індекс із нуля, коли селектор збігається з кількома елементами
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" }
}
}

Миша (на основі координат)

Section titled “Миша (на основі координат)”

Низькорівневе керування мишею за координатами області перегляду. Використовуйте це, коли взаємодія на основі локатора заблокована або ненадійна.

МетодШляхКлючові параметриПризначення
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"

POST /:profileId/mouse/down та /:profileId/mouse/up

Section titled “POST /:profileId/mouse/down та /:profileId/mouse/up”
ПолеТипЗа замовчуванням
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_RUNNINGid профілю не є запущеним профілем (HTTP 404).
BAD_REQUESTВідсутні обов’язкові поля тіла або індекс вкладки поза діапазоном (HTTP 400).
LAST_TABСпроба закрити єдину залишену вкладку (HTTP 400).
NO_DIALOGdialog викликано без очікуваного діалогу (HTTP 404).
NAVIGATE_FAILEDnavigate / back / forward / reload не вдалися.
SNAPSHOT_FAILED / SCREENSHOT_FAILEDSnapshot або screenshot не вдалися.
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Пакетний запит не вдалося виконати (наприклад, профіль не запущено).