openclaw browser и шаблонам сценариев (снимки состояния, ссылки, ожидания, отладочные потоки).
Управляющий API (необязательно)
Только для локальных интеграций Gateway предоставляет небольшой HTTP API через loopback. Этот автономный сервер включается явно — задайте переменную окруженияOPENCLAW_EAGER_BROWSER_CONTROL_SERVER=1 в окружении сервиса gateway и перезапустите gateway, прежде чем HTTP-эндпоинты станут доступны. Без этой переменной среда выполнения управления браузером по-прежнему работает через CLI и инструменты агента, но на управляющем loopback-порту ничего не слушает.
- Статус/запуск/остановка:
GET /,POST /start,POST /stop - Вкладки:
GET /tabs,POST /tabs/open,POST /tabs/focus,DELETE /tabs/:targetId - Снимок состояния/скриншот:
GET /snapshot,POST /screenshot - Действия:
POST /navigate,POST /act - Хуки:
POST /hooks/file-chooser,POST /hooks/dialog - Загрузки:
POST /download,POST /wait/download - Разрешения:
POST /permissions/grant - Отладка:
GET /console,POST /pdf - Отладка:
GET /errors,GET /requests,POST /trace/start,POST /trace/stop,POST /highlight - Сеть:
POST /response/body - Состояние:
GET /cookies,POST /cookies/set,POST /cookies/clear - Состояние:
GET /storage/:kind,POST /storage/:kind/set,POST /storage/:kind/clear - Настройки:
POST /set/offline,POST /set/headers,POST /set/credentials,POST /set/geolocation,POST /set/media,POST /set/timezone,POST /set/locale,POST /set/device
?profile=<name>. POST /start?headless=true запрашивает одноразовый headless-запуск для локальных управляемых профилей без изменения сохраненной конфигурации браузера; профили attach-only, удаленного CDP и существующего сеанса отклоняют это переопределение, потому что OpenClaw не запускает эти процессы браузера.
Для эндпоинтов вкладок targetId — это имя поля совместимости. Предпочитайте передавать suggestedTargetId из GET /tabs или POST /tabs/open; также принимаются метки и дескрипторы tabId, такие как t1. Необработанные идентификаторы целей CDP и уникальные необработанные префиксы target-id по-прежнему работают, но это нестабильные диагностические дескрипторы.
Если настроена аутентификация gateway с общим секретом, HTTP-маршруты браузера также требуют аутентификацию:
Authorization: Bearer <gateway token>x-openclaw-password: <gateway password>или HTTP Basic auth с этим паролем
- Этот автономный loopback API браузера не использует заголовки идентификации trusted-proxy или Tailscale Serve.
- Если
gateway.auth.modeимеет значениеnoneилиtrusted-proxy, эти loopback-маршруты браузера не наследуют эти режимы с идентификацией; оставляйте их доступными только через loopback.
Контракт ошибок /act
POST /act использует структурированный ответ об ошибке для валидации на уровне маршрута и сбоев политики:
code:
ACT_KIND_REQUIRED(HTTP 400):kindотсутствует или не распознан.ACT_INVALID_REQUEST(HTTP 400): полезная нагрузка действия не прошла нормализацию или валидацию.ACT_SELECTOR_UNSUPPORTED(HTTP 400):selectorиспользован с неподдерживаемым типом действия.ACT_EVALUATE_DISABLED(HTTP 403):evaluate(илиwait --fn) отключен конфигурацией.ACT_TARGET_ID_MISMATCH(HTTP 403): верхнеуровневый или пакетныйtargetIdконфликтует с целью запроса.ACT_EXISTING_SESSION_UNSUPPORTED(HTTP 501): действие не поддерживается для профилей существующего сеанса.
{ "error": "<message>" } без поля code.
Требование Playwright
Некоторые возможности (navigate/act/AI-снимок состояния/снимок состояния ролей, скриншоты элементов, PDF) требуют Playwright. Если Playwright не установлен, эти эндпоинты возвращают понятную ошибку 501. Что по-прежнему работает без Playwright:- ARIA-снимки состояния
- Снимки состояния доступности в стиле ролей (
--interactive,--compact,--depth,--efficient), когда доступен CDP WebSocket для каждой вкладки. Это резервный вариант для инспекции и обнаружения ссылок; Playwright остается основным движком действий. - Скриншоты страниц для управляемого браузера
openclaw, когда доступен CDP WebSocket для каждой вкладки - Скриншоты страниц для профилей
existing-session/ Chrome MCP - Скриншоты
existing-sessionна основе ссылок (--ref) из вывода snapshot
navigateact- AI-снимки состояния, которые зависят от собственного формата AI-снимков Playwright
- Скриншоты элементов по CSS-селекторам (
--element) - полный экспорт браузера в PDF
--full-page; маршрут возвращает fullPage is not supported for element screenshots.
Если вы видите Playwright is not available in this gateway build, в упакованном Gateway отсутствует основная зависимость среды выполнения браузера. Переустановите или обновите OpenClaw, затем перезапустите gateway. Для Docker также установите браузерные бинарные файлы Chromium, как показано ниже.
Установка Playwright в Docker
Если ваш Gateway работает в Docker, избегайтеnpx playwright (конфликты переопределения npm).
Для пользовательских образов встройте Chromium в образ:
PLAYWRIGHT_BROWSERS_PATH (например, /home/node/.cache/ms-playwright) и убедитесь, что /home/node сохраняется через OPENCLAW_HOME_VOLUME или bind mount. OpenClaw автоматически обнаруживает сохраненный Chromium в Linux. См. Docker.
Как это работает (внутреннее)
Небольшой loopback-сервер управления принимает HTTP-запросы и подключается к браузерам на базе Chromium через CDP. Расширенные действия (click/type/snapshot/PDF) проходят через Playwright поверх CDP; когда Playwright отсутствует, доступны только операции без Playwright. Агент видит один стабильный интерфейс, пока локальные/удаленные браузеры и профили свободно меняются под ним.Краткий справочник CLI
Все команды принимают--browser-profile <name> для выбора конкретного профиля и --json для машиночитаемого вывода.
Основы: статус, вкладки, открыть/фокус/закрыть
Основы: статус, вкладки, открыть/фокус/закрыть
Инспекция: скриншот, снимок состояния, консоль, ошибки, запросы
Инспекция: скриншот, снимок состояния, консоль, ошибки, запросы
Действия: navigate, click, type, drag, wait, evaluate
Действия: navigate, click, type, drag, wait, evaluate
Состояние: cookies, storage, offline, headers, geo, device
Состояние: cookies, storage, offline, headers, geo, device
uploadиdialog— это вызовы взведения; запускайте их перед click/press, который вызывает выбор файла/диалог. Если действие открывает модальное окно, ответ действия включаетblockedByDialogиbrowserState.dialogs.pending; передайте этотdialogId, чтобы ответить напрямую. Диалоги, обработанные вне OpenClaw, отображаются вbrowserState.dialogs.recent.click/type/и т. д. требуютrefизsnapshot(числовой12, ролевая ссылкаe12или действенная ARIA-ссылкаax12). CSS-селекторы намеренно не поддерживаются для действий. Используйтеclick-coords, когда видимая позиция в viewport — единственная надежная цель.- Пути загрузок и трассировок ограничены временными корнями OpenClaw:
/tmp/openclaw{,/downloads}(резервный вариант:${os.tmpdir()}/openclaw/...). uploadпринимает файлы из временного корня загрузок OpenClaw и входящие медиа, управляемые OpenClaw. Управляемые входящие медиа можно указывать какmedia://inbound/<id>, относительный к песочнице путьmedia/inbound/<id>или разрешенный путь внутри управляемого каталога входящих медиа. Вложенные media refs, обход каталогов, symlinks, hardlinks и произвольные локальные пути по-прежнему отклоняются.uploadтакже может напрямую задавать файловые input через--input-refили--element.
suggestedTargetId из tabs.
Краткий обзор флагов снимков состояния:
--format ai(по умолчанию с Playwright): AI-снимок с числовыми ref-идентификаторами (aria-ref="<n>").--format aria: дерево доступности с ref-идентификаторамиaxN. Когда Playwright доступен, OpenClaw связывает ref-идентификаторы с backend DOM id на живой странице, чтобы последующие действия могли их использовать; иначе считайте вывод предназначенным только для инспекции.--efficient(или--mode efficient): компактный пресет снимка ролей. Установитеbrowser.snapshotDefaults.mode: "efficient", чтобы сделать его значением по умолчанию (см. конфигурацию Gateway).--interactive,--compact,--depth,--selectorпринудительно используют снимок ролей с ref-идентификаторами видаref=e12.--frame "<iframe>"ограничивает снимки ролей iframe.- С Playwright
--labelsдобавляет снимок экрана с наложенными ref-метками (печатаетMEDIA:<path>) плюс массивannotationsс ограничивающей рамкой каждого ref-идентификатора. Дляscreenshotметки на базе Playwright работают с--full-page,--refи--element; дляsnapshotсопровождающий снимок экрана остается только в пределах viewport. Профили existing-session/chrome-mcp отображают наложенные метки на снимках страниц, но не возвращаютannotationsи не используют вспомогательную проекцию Playwright для full-page/ref/element. Без Playwright или chrome-mcp снимки экрана с метками недоступны. --urlsдобавляет обнаруженные назначения ссылок к AI-снимкам.
Снимки и ref-идентификаторы
OpenClaw поддерживает два стиля “снимков”:-
AI-снимок (числовые ref-идентификаторы):
openclaw browser snapshot(по умолчанию;--format ai)- Вывод: текстовый снимок, включающий числовые ref-идентификаторы.
- Действия:
openclaw browser click 12,openclaw browser type 23 "hello". - Внутри ref-идентификатор разрешается через
aria-refPlaywright.
-
Снимок ролей (role refs вроде
e12):openclaw browser snapshot --interactive(или--compact,--depth,--selector,--frame)- Вывод: список/дерево на основе ролей с
[ref=e12](и необязательным[nth=1]). - Действия:
openclaw browser click e12,openclaw browser highlight e12. - Внутри ref-идентификатор разрешается через
getByRole(...)(плюсnth()для дубликатов). - Добавьте
--labels, чтобы включить снимок экрана с наложенными меткамиe12. В профилях на базе Playwright это также возвращает метаданные ограничивающих рамок для каждого ref-идентификатора (annotations[]). - Добавьте
--urls, когда текст ссылки неоднозначен и агенту нужны конкретные цели навигации.
- Вывод: список/дерево на основе ролей с
-
ARIA-снимок (ARIA refs вроде
ax12):openclaw browser snapshot --format aria- Вывод: дерево доступности в виде структурированных узлов.
- Действия:
openclaw browser click ax12работает, когда путь снимка может связать ref-идентификатор через Playwright и Chrome backend DOM ids.
-
Если Playwright недоступен, ARIA-снимки все равно могут быть полезны для
инспекции, но ref-идентификаторы могут быть недоступны для действий. Повторно снимите страницу с
--format aiили--interactive, когда нужны ref-идентификаторы для действий. -
Docker-доказательство для резервного пути raw-CDP:
pnpm test:docker:browser-cdp-snapshotзапускает Chromium с CDP, выполняетbrowser doctor --deepи проверяет, что снимки ролей включают URL ссылок, кликабельные элементы, повышенные из курсора, и метаданные iframe.
- Ref-идентификаторы не стабильны между навигациями; если что-то не удалось, повторно выполните
snapshotи используйте свежий ref-идентификатор. /actвозвращает текущий сыройtargetIdпосле замены, вызванной действием, когда может доказать вкладку-замену. Продолжайте использовать стабильные id/метки вкладок для последующих команд.- Если снимок ролей был сделан с
--frame, ref-идентификаторы ролей ограничены этим iframe до следующего снимка ролей. - Неизвестные или устаревшие ref-идентификаторы
axNбыстро завершаются ошибкой вместо перехода к селекторуaria-refPlaywright. Когда это происходит, выполните свежий снимок той же вкладки.
Расширенные ожидания
Можно ждать не только время/текст:- Ожидать URL (globs поддерживаются Playwright):
openclaw browser wait --url "**/dash"
- Ожидать состояние загрузки:
openclaw browser wait --load networkidle- Поддерживается в управляемых профилях
openclawи raw/remote CDP. Профилиuserиexisting-sessionотклоняютnetworkidle; используйте там ожидания по--url,--text, селектору или--fn.
- Ожидать JS-предикат:
openclaw browser wait --fn "window.ready===true"
- Ожидать, пока селектор станет видимым:
openclaw browser wait "#main"
Рабочие процессы отладки
Когда действие завершается ошибкой (например, “not visible”, “strict mode violation”, “covered”):openclaw browser snapshot --interactive- Используйте
click <ref>/type <ref>(предпочитайте ref-идентификаторы ролей в интерактивном режиме) - Если ошибка сохраняется:
openclaw browser highlight <ref>, чтобы увидеть, на что нацелен Playwright - Если страница ведет себя странно:
openclaw browser errors --clearopenclaw browser requests --filter api --clear
- Для глубокой отладки: запишите трассировку:
openclaw browser trace start- воспроизведите проблему
openclaw browser trace stop(печатаетTRACE:<path>)
JSON-вывод
--json предназначен для скриптов и структурированных инструментов.
Примеры:
refs и небольшой блок stats (lines/chars/refs/interactive), чтобы инструменты могли оценивать размер и плотность полезной нагрузки.
Настройки состояния и окружения
Они полезны для рабочих процессов вида “заставить сайт вести себя как X”:- Cookies:
cookies,cookies set,cookies clear - Хранилище:
storage local|session get|set|clear - Offline:
set offline on|off - Заголовки:
set headers --headers-json '{"X-Debug":"1"}'(устаревшийset headers --json '{"X-Debug":"1"}'остается поддерживаемым) - HTTP basic auth:
set credentials user pass(или--clear) - Геолокация:
set geo <lat> <lon> --origin "https://example.com"(или--clear) - Media:
set media dark|light|no-preference|none - Часовой пояс / локаль:
set timezone ...,set locale ... - Устройство / viewport:
set device "iPhone 14"(пресеты устройств Playwright)set viewport 1280 720
Безопасность и конфиденциальность
- Профиль браузера openclaw может содержать авторизованные сессии; считайте его чувствительным.
browser act kind=evaluate/openclaw browser evaluateиwait --fnвыполняют произвольный JavaScript в контексте страницы. Prompt injection может направлять это поведение. Отключите его с помощьюbrowser.evaluateEnabled=false, если он вам не нужен.openclaw browser evaluate --fnпринимает исходный код функции, выражение или тело инструкции. Тела инструкций оборачиваются как async-функции, поэтому используйтеreturnдля значения, которое нужно вернуть. Используйте--timeout-ms <ms>, когда функция на стороне страницы может требовать больше времени, чем стандартный тайм-аут evaluate.- Для заметок о входе и антибот-защите (X/Twitter и т. д.) см. Вход в браузер + публикация в X/Twitter.
- Держите Gateway/Node-хост приватным (loopback или только tailnet).
- Удаленные CDP endpoints имеют широкие возможности; туннелируйте и защищайте их.
Связанные материалы
- Браузер - обзор, конфигурация, профили, безопасность
- Вход в браузер - вход на сайты
- Устранение неполадок браузера в Linux
- Устранение неполадок браузера в WSL2