Запуск и работа с профилями
Прежде чем агент сможет автоматизировать страницу, нужный профиль должен быть запущен. На этой странице разобран весь жизненный цикл через API локального демона — список профилей, создание профиля (с отпечатком и прокси), его запуск, опрос статуса и остановка — а также объясняется ошибка PROFILE_NOT_RUNNING, с которой вы столкнётесь, если пропустите шаг запуска.
Все запросы идут к локальному демону. API управления профилями находится по адресу http://localhost:7891/api; API автоматизации (навигация, клики, ввод текста, снимки) находится по адресу http://localhost:7891/api/automation/:profileId/<action> и описан в разделах HTTP API и Справочник API.
Формат ответа
Заголовок раздела «Формат ответа»Каждый эндпоинт демона возвращает один и тот же JSON-конверт, чтобы ваш код мог ветвиться по ok до чтения data:
{ "ok": true, "data": { } }{ "ok": false, "error": { "code": "PROFILE_NOT_RUNNING", "message": "..." } }Некоторые эндпоинты возвращают "data": null при успехе (launch, stop, unlock). Проверяйте ok, а не структуру data.
Значения статуса профиля
Заголовок раздела «Значения статуса профиля»Профиль сообщает один статус выполнения. Автоматизация работает только пока профиль находится в статусе running.
| Статус | Значение |
|---|---|
idle | Создан, но не запущен. Процесс браузера не работает. |
launching | Запуск принят; браузер стартует и синхронизирует удалённое состояние сессии. |
running | Браузер работает. Эндпоинты автоматизации доступны. |
stopping | Остановка принята; куки и вкладки синхронизируются перед закрытием браузера. |
locked | Профиль открыт на другом устройстве. Запустить его здесь нельзя, пока блокировка не снята. |
Список профилей
Заголовок раздела «Список профилей»Возвращает все профили с их текущим статусом выполнения. Для чтения списка лицензия не требуется.
curl -s localhost:7891/api/profiles | jq '.data[] | {id, name, status}'Если вы внешний агент, которому не передали конкретный ID профиля, запросите список профилей и дайте оператору выбрать один. Получив ID, сохраните его в переменной окружения на весь остальной процесс:
PROFILE=<profile-id>Создание профиля
Заголовок раздела «Создание профиля»Создание профиля требует активной лицензии. В теле запроса передаются имя профиля, прокси, отпечаток и геолокация. При успехе демон возвращает 201 с новым профилем и status: "idle".
curl -s localhost:7891/api/profiles -X POST \ -H 'Content-Type: application/json' -d '{ "name": "My Profile", "proxy": {"type": "none"}, "fingerprint": { "os": "windows", "userAgent": "Mozilla/5.0 ...", "screenWidth": 1920, "screenHeight": 1080, "language": "en-US", "timezone": "America/New_York", "webrtc": "fake" }, "geolocation": {"enabled": false} }'Поле webrtc принимает значения real, fake или disabled. Чтобы подключить прокси вместо {"type": "none"}, укажите параметры подключения в объекте proxy — см. Настройка прокси. Полный список полей отпечатка и их соответствие настройкам браузера приведён в разделе Параметры отпечатка.
Обновление профиля
Заголовок раздела «Обновление профиля»При обновлении все поля необязательны — отправляйте только то, что хотите изменить. Демон возвращает обновлённый профиль с его текущим статусом.
curl -s localhost:7891/api/profiles/$PROFILE -X PATCH \ -H 'Content-Type: application/json' -d '{"name": "New Name", "tags": ["work"]}'Запуск профиля
Заголовок раздела «Запуск профиля»Запуск стартует процесс браузера для профиля. Он асинхронен: при успехе вы получаете 202 Accepted с "data": null, а статус переходит в launching.
curl -s localhost:7891/api/profiles/$PROFILE/launch -X POSTПеред тем как принять запуск, проверяются два условия:
- Активная лицензия. Нет активной подписки →
403сNO_SUBSCRIPTION(аккаунт никогда не платил) илиLICENSE_EXPIRED(подписка истекла). Тарифы только платные — см. Тарифы и цены. - Свободный одновременный слот. Ваш тариф ограничивает, сколько профилей может работать одновременно — Starter 3, Pro 40, Agency 300. Если вы уже достигли лимита, запуск вернёт
403 CONCURRENT_LIMIT_REACHED; сначала остановите работающий профиль или повысьте тариф.
| Код ошибки | HTTP | Значение |
|---|---|---|
NO_SUBSCRIPTION | 403 | У аккаунта никогда не было платного тарифа. |
LICENSE_EXPIRED | 403 | Подписка истекла. |
CONCURRENT_LIMIT_REACHED | 403 | Все одновременные слоты вашего тарифа заняты. |
PROFILE_NOT_FOUND | 404 | Профиля с таким ID нет. |
PROFILE_LOCKED | 409 | Профиль открыт на другом устройстве. |
UNAUTHORIZED | 401 | Сессионные токены демона отсутствуют или истекли; войдите через приложение. |
Дождитесь, пока профиль запустится
Заголовок раздела «Дождитесь, пока профиль запустится»Поскольку запуск возвращается до того, как браузер готов, опрашивайте эндпоинт статуса, пока он не вернёт running. Не отправляйте действия автоматизации во время launching.
curl -s localhost:7891/api/profiles/$PROFILE/status | jq -r .data.statusПростой цикл ожидания:
curl -s localhost:7891/api/profiles/$PROFILE/launch -X POST
until [ "$(curl -s localhost:7891/api/profiles/$PROFILE/status | jq -r .data.status)" = "running" ]; do sleep 1doneПроверка статуса
Заголовок раздела «Проверка статуса»Эндпоинт статуса — единственный источник истины о том, можно ли автоматизировать профиль. Лицензия для него не нужна, ответ мгновенный.
curl -s localhost:7891/api/profiles/$PROFILE/status | jq -r .data.status{ "ok": true, "data": { "status": "running" } }Остановка профиля
Заголовок раздела «Остановка профиля»Остановка закрывает браузер. Перед завершением процесса демон синхронизирует сессию — открытые вкладки и любые изменённые куки выгружаются, чтобы следующий запуск продолжил с того места, где вы остановились. При успехе вы получаете "data": null, а статус переходит в stopping, затем обратно в idle.
curl -s localhost:7891/api/profiles/$PROFILE/stop -X POSTPROFILE_NOT_RUNNING
Заголовок раздела «PROFILE_NOT_RUNNING»Если вы вызываете эндпоинт автоматизации (/api/automation/$PROFILE/navigate, /snapshot, /click, …) для профиля, который не находится в статусе running, демон отвечает 404 с кодом ошибки PROFILE_NOT_RUNNING.
{ "ok": false, "error": { "code": "PROFILE_NOT_RUNNING", "message": "..." } }Это самая частая ошибка при первом запуске: профиль существует, но его браузер так и не был запущен (или уже остановлен). Эндпоинты кук ведут себя так же — GET/POST/DELETE /api/profiles/$PROFILE/cookies работают только пока профиль запущен.
Как этого избежать:
- Запускайте профиль (
POST /api/profiles/$PROFILE/launch) до любого вызова автоматизации. - Воспринимайте
202от запуска как «принято, но не готово». ОпрашивайтеGET /api/profiles/$PROFILE/status, пока он не вернётrunning— автоматизация во времяlaunchingвсё ещё может завершиться неудачей. - Перепроверяйте статус, если долгий процесс застопорился: сбой браузера или остановка с другого устройства выводят профиль из статуса
running. - Работайте строго внутри профиля, который дал вам оператор. Не запускайте, не останавливайте и не переключайтесь на другой профиль, чтобы «исправить» несоответствие — если указанный профиль не запущен или не подходит для задачи, остановитесь и спросите оператора.
Сквозной жизненный цикл
Заголовок раздела «Сквозной жизненный цикл»Полный процесс создание → запуск → автоматизация → остановка:
# 0. Pin the profile ID (or create one first)PROFILE=<profile-id>
# 1. Launch (async — returns 202)curl -s localhost:7891/api/profiles/$PROFILE/launch -X POST
# 2. Wait until the browser is upuntil [ "$(curl -s localhost:7891/api/profiles/$PROFILE/status | jq -r .data.status)" = "running" ]; do sleep 1done
# 3. Automate (now safe — no PROFILE_NOT_RUNNING)curl -s localhost:7891/api/automation/$PROFILE/navigate -X POST \ -H 'Content-Type: application/json' -d '{"url":"https://example.com"}'
# 4. Stop — syncs cookies & tabs before closingcurl -s localhost:7891/api/profiles/$PROFILE/stop -X POSTДальнейшие шаги
Заголовок раздела «Дальнейшие шаги»- HTTP API — эндпоинты действий автоматизации, когда профиль запущен.
- Справочник API — полный каталог эндпоинтов и действий.
- Лучшие практики — пакетная обработка, снимки и правила скрытности.
- Установка агентского скилла — готовые инструкции для AI-агента.