title: Browser Automation
description: Control browsers with multiple providers, local Chrome via CDP, or cloud browsers for web interaction, form filling, scraping, and more.
sidebar_label: Browser
sidebar_position: 5
lang: ru
Автоматизация браузера
Агент Hermes включает в себя полный набор инструментов для автоматизации браузера с несколькими опциями серверной части:
Облачный режим базы браузера через Browserbase для управляемых облачных браузеров и инструментов защиты от ботов.
Использовать облачный режим браузера через Использование браузера в качестве альтернативного поставщика облачного браузера.
Облачный режим Firecrawl через Firecrawl для облачных браузеров со встроенным парсингом.
Локальный режим Camofox через Camofox для локального просмотра с защитой от обнаружения (подмена отпечатков пальцев на основе Firefox)
Локальный Chrome через CDP — подключите инструменты браузера к своему экземпляру Chrome с помощью /browser connect.
Режим локального браузера через интерфейс командной строки agent-browser и локальную установку Chromium.
Во всех режимах агент может перемещаться по веб-сайтам, взаимодействовать с элементами страниц, заполнять формы и извлекать информацию.
Обзор
Страницы представлены в виде деревьев доступности (текстовых снимков), что делает их идеальными для агентов LLM. Интерактивные элементы получают идентификаторы ссылок (например, @e1, @e2), которые агент использует для нажатия и ввода текста.
Ключевые возможности:
Облачное выполнение с участием нескольких поставщиков — База браузеров, Использование браузера или Firecrawl — локальный браузер не требуется.
Локальная интеграция с Chrome — подключитесь к работающему Chrome через CDP для практического просмотра.
Изоляция сеанса — для каждой задачи создается собственный сеанс браузера.
Автоматическая очистка — неактивные сеансы закрываются по истечении таймаута.
Анализ зрения — снимок экрана + анализ AI для визуального понимания
Настройка
💡 Tip
Подписчики
Если у вас есть платная подписка на [Nous Portal](https://portal.nousresearch.com), вы можете использовать автоматизацию браузера через **[Tool Gateway](tool-gateway.md)** без каких-либо отдельных ключей API. Запустите `hermes model` или `hermes tools`, чтобы включить его.
Облачный режим базы браузера
Чтобы использовать облачные браузеры, управляемые Browserbase, добавьте:
# Add to ~/.hermes/.envBROWSERBASE_API_KEY=***
BROWSERBASE_PROJECT_ID=your-project-id-here
Чтобы использовать Browser Use в качестве поставщика облачного браузера, добавьте:
# Add to ~/.hermes/.envBROWSER_USE_API_KEY=***
Получите ключ API на сайте browser-use.com. Использование браузера предоставляет облачный браузер через REST API. Если заданы учетные данные Browserbase и Browser Use, Browserbase имеет приоритет.
Облачный режим Firecrawl
Чтобы использовать Firecrawl в качестве поставщика облачного браузера, добавьте:
# Add to ~/.hermes/.envFIRECRAWL_API_KEY=fc-***
Получите ключ API на firecrawl.dev. Затем выберите Firecrawl в качестве поставщика браузера:
Гибридная маршрутизация: облако для общедоступных URL-адресов, локальная для локальной сети/локального хоста
Когда облачный провайдер настроен, Hermes автоматически создает локальную версию Chromium.
для URL-адресов, которые разрешаются в частный адрес, адрес обратной связи или локальную сеть (localhost, 127.0.0.1,
192.168.x.x, 10.x.x.x, 172.16-31.x.x, *.local, *.lan, *.internal,
Шлейф IPv6 ::1, локальный канал 169.254.x.x). Публичные URL-адреса продолжают использовать
облачный провайдер в том же разговоре.
Это решает распространенный рабочий процесс «Я разрабатываю локально, но использую Browserbase» —
агент может сделать снимок экрана вашей информационной панели по адресу http://localhost:3000 AND scrape
https://github.com без необходимости переключения провайдера или отключения защиты SSRF.
Поставщик облачных услуг никогда не видит частный URL-адрес.
Эта функция включена по умолчанию. Чтобы отключить его (все URL-адреса переходят на настроенный
облачный провайдер, как и раньше):
Если автоматическая маршрутизация отключена, частные URL-адреса отклоняются с
"Blocked: URL targets a private or internal address", если вы также не установите
browser.allow_private_urls: true (что позволяет поставщику облачных услуг попробовать их —
обычно не работает, поскольку Browserbase и т. д. не могут подключиться к вашей локальной сети).
Требования: локальная коляска использует тот же интерфейс командной строки agent-browser, что и чисто локальная версия.
режим, поэтому вам необходимо его установить (hermes setup tools → Browser Automation
автоматически устанавливает его). Пост-навигация перенаправляет с общедоступного URL-адреса на частный
адрес по-прежнему заблокированы (вы не можете использовать трюк с перенаправлением на внутренний адрес, чтобы достичь
вашей локальной сети через общедоступный путь).
Локальный режим Camofox
Camofox — это автономный сервер Node.js, включающий Camoufox (вилка Firefox с подменой отпечатков пальцев C++). Он обеспечивает локальный просмотр с защитой от обнаружения без облачных зависимостей.
# Install and run
gitclonehttps://github.com/jo-inc/camofox-browser&&cdcamofox-browser
npminstall&&npmstart# downloads Camoufox (~300MB) on first run# Or via Docker
dockerrun-d--networkhost-eCAMOFOX_PORT=9377jo-inc/camofox-browser
Затем установите ~/.hermes/.env:
CAMOFOX_URL=http://localhost:9377
Или настройте через hermes tools → Автоматизация браузера → Camofox.
Если установлен CAMOFOX_URL, все инструменты браузера автоматически маршрутизируются через Camofox вместо Browserbase или агента-браузера.
Постоянные сеансы браузера
По умолчанию каждый сеанс Camofox получает случайный идентификатор — файлы cookie и логины не сохраняются после перезапуска агента. Чтобы включить постоянные сеансы браузера, добавьте следующее в ~/.hermes/config.yaml:
browser:camofox:managed_persistence:true
Затем полностью перезапустите Hermes, чтобы новая конфигурация была принята.
:::предупреждение Вложенный путь имеет значение
Гермес читает browser.camofox.managed_persistence, неmanaged_persistence высшего уровня. Распространенной ошибкой является запись:
Если флаг установлен на неправильном пути, Hermes автоматически вернется к случайному эфемерному адресу userId, и ваше состояние входа будет потеряно при каждом сеансе.
Что делает Гермес
Отправляет детерминированный профиль userId в Camofox, чтобы сервер мог повторно использовать один и тот же профиль Firefox в разных сеансах.
— Пропускает разрушение контекста на стороне сервера при очистке, поэтому файлы cookie и входы в систему сохраняются между задачами агента.
Привязывает userId к активному профилю Hermes, поэтому разные профили Hermes получают разные профили браузера (изоляция профилей).
Чего не делает Гермес
Это не приводит к принудительному сохранению на сервере Camofox. Гермес отправляет только стабильный userId; сервер должен принять это во внимание, сопоставив userId с постоянным каталогом профиля Firefox.
Если ваша сборка сервера Camofox рассматривает каждый запрос как эфемерный (например, всегда вызывает browser.newContext() без загрузки сохраненного профиля), Hermes не сможет сохранить эти сеансы. Убедитесь, что вы используете сборку Camofox, которая реализует сохранение профиля на основе идентификатора пользователя.
Убедитесь, что все работает
Запустите Hermes и ваш сервер Camofox.
Откройте Google (или любой другой сайт входа) в задаче браузера и войдите в систему вручную.
Завершите задачу браузера обычным способом.
Запустите новую задачу браузера.
Откройте тот же сайт еще раз — вы все равно должны войти в систему.
Если на шаге 5 вы выйдете из системы, сервер Camofox не поддерживает стабильную версию userId. Дважды проверьте путь к конфигурации, убедитесь, что вы полностью перезапустили Hermes после редактирования config.yaml, и убедитесь, что ваша версия сервера Camofox поддерживает постоянные профили для каждого пользователя.
Где живет государство
Hermes извлекает стабильный userId из каталога области профиля ~/.hermes/browser_auth/camofox/ (или эквивалент в $HERMES_HOME для профилей, отличных от профилей по умолчанию). Фактические данные профиля браузера хранятся на стороне сервера Camofox и хранятся под ключом userId. Чтобы полностью сбросить постоянный профиль, очистите его на сервере Camofox и удалите каталог состояния соответствующего профиля Hermes.
Просмотр в реальном времени VNC
Когда Camofox работает в режиме заголовка (с видимым окном браузера), он предоставляет порт VNC в ответе на проверку работоспособности. Hermes автоматически обнаруживает это и включает URL-адрес VNC в ответы навигации, чтобы агент мог поделиться ссылкой, чтобы вы могли посмотреть браузер в прямом эфире.
Локальный Chrome через CDP (/browser connect)
Вместо облачного провайдера вы можете подключить инструменты браузера Hermes к своему работающему экземпляру Chrome через протокол Chrome DevTools (CDP). Это полезно, если вы хотите видеть, что делает агент в режиме реального времени, взаимодействовать со страницами, для которых требуются ваши собственные файлы cookie/сессии, или избежать затрат на облачный браузер.
:::примечание
/browser connect — это косая черта интерактивной команды CLI — она не отправляется шлюзом. Если вы попытаетесь запустить его внутри чата WebUI, Telegram, Discord или другого шлюза, сообщение будет отправлено агенту в виде обычного текста, и команда не будет выполнена. Запустите Hermes с терминала (hermes или hermes chat) и введите туда /browser connect.
В CLI используйте:
Если Chrome еще не работает с удаленной отладкой, Hermes попытается автоматически запустить его с помощью --remote-debugging-port=9222.
:::совет
Чтобы запустить Chrome вручную с включенным CDP, используйте выделенный каталог пользовательских данных, чтобы порт отладки действительно появился, даже если Chrome уже работает с вашим обычным профилем:
# Linux
google-chrome\--remote-debugging-port=9222\--user-data-dir=$HOME/.hermes/chrome-debug\--no-first-run\--no-default-browser-check&# macOS"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"\--remote-debugging-port=9222\--user-data-dir="$HOME/.hermes/chrome-debug"\--no-first-run\--no-default-browser-check&
Затем запустите командную строку Hermes и выполните команду /browser connect.
Почему --user-data-dir? Без него при запуске Chrome, когда уже работает обычный экземпляр Chrome, обычно открывается новое окно существующего процесса, а этот существующий процесс не был запущен с помощью --remote-debugging-port, поэтому порт 9222 никогда не открывается. Выделенный каталог пользовательских данных вызывает новый процесс Chrome, который фактически прослушивает порт отладки. --no-first-run --no-default-browser-check пропускает мастер первого запуска нового профиля.
При подключении через CDP все инструменты браузера (browser_navigate, browser_click и т. д.) работают на вашем работающем экземпляре Chrome, а не запускают облачный сеанс.
Режим локального браузера
Если вы не установили какие-либо облачные учетные данные и не используете /browser connect, Hermes все равно сможет использовать инструменты браузера посредством локальной установки Chromium, управляемой agent-browser.
Необязательные переменные среды
# Residential proxies for better CAPTCHA solving (default: "true")BROWSERBASE_PROXIES=true# Advanced stealth with custom Chromium — requires Scale Plan (default: "false")BROWSERBASE_ADVANCED_STEALTH=false# Session reconnection after disconnects — requires paid plan (default: "true")BROWSERBASE_KEEP_ALIVE=true# Custom session timeout in milliseconds (default: project default)# Examples: 600000 (10min), 1800000 (30min)BROWSERBASE_SESSION_TIMEOUT=600000# Inactivity timeout before auto-cleanup in seconds (default: 120)BROWSER_INACTIVITY_TIMEOUT=120
Установка CLI агента-браузера
npminstall-gagent-browser
# Or install locally in the repo:
npminstall
:::информация
Набор инструментов browser должен быть включен в список toolsets вашей конфигурации или включен через hermes config set toolsets '["hermes-cli", "browser"]'.
Доступные инструменты
browser_navigate
Перейдите к URL-адресу. Должен вызываться перед любым другим инструментом браузера. Инициализирует сеанс Browserbase.
Navigate to https://github.com/NousResearch
:::совет
Для простого поиска информации отдайте предпочтение web_search или web_extract — они быстрее и дешевле. Используйте инструменты браузера, когда вам нужно взаимодействовать со страницей (нажимать кнопки, заполнять формы, обрабатывать динамический контент).
browser_snapshot
Получите текстовый снимок дерева доступности текущей страницы. Возвращает интерактивные элементы с идентификаторами ссылок, такими как @e1, @e2 для использования с browser_click и browser_type.
full=false (по умолчанию): компактное представление, показывающее только интерактивные элементы.
full=true: полное содержимое страницы.
Снимки длиной более 8000 символов автоматически суммируются с помощью LLM.
browser_click
Щелкните элемент, идентифицированный по его идентификатору ссылки на снимке.
Click@e5topressthe"Sign In"button
browser_type
Введите текст в поле ввода. Сначала очищает поле, затем вводит новый текст.
Type"hermes agent"intothesearchfield@e3
browser_scroll
Прокрутите страницу вверх или вниз, чтобы открыть больше контента.
Scroll down to see more results
browser_press
Нажмите клавишу клавиатуры. Полезно для отправки форм или навигации.
Press Enter to submit the form
Поддерживаемые ключи: Enter, Tab, Escape, ArrowDown, ArrowUp и другие.
browser_back
Вернитесь на предыдущую страницу истории браузера.
browser_get_images
Перечислите все изображения на текущей странице с их URL-адресами и замещающим текстом. Полезно для поиска изображений для анализа.
browser_vision
Сделайте снимок экрана и проанализируйте его с помощью Vision AI. Используйте это, когда текстовые снимки не фиксируют важную визуальную информацию — особенно полезно для CAPTCHA, сложных макетов или задач визуальной проверки.
Скриншот сохраняется постоянно, а путь к файлу возвращается вместе с анализом AI. На платформах обмена сообщениями (Telegram, Discord, Slack, WhatsApp) вы можете попросить агента поделиться снимком экрана — он будет отправлен как встроенное фото с помощью механизма MEDIA:.
Whatdoesthechartonthispageshow?
Снимки экрана хранятся в ~/.hermes/cache/screenshots/ и автоматически очищаются через 24 часа.
browser_console
Получите выходные данные консоли браузера (сообщения журнала/предупреждений/ошибок) и неперехваченные исключения JavaScript с текущей страницы. Необходим для обнаружения скрытых ошибок JS, которые не отображаются в дереве доступности.
CheckthebrowserconsoleforanyJavaScripterrors
Используйте clear=True, чтобы очистить консоль после прочтения, чтобы при последующих вызовах отображались только новые сообщения.
browser_cdp
Сквозной доступ к протоколу Raw Chrome DevTools — запасной выход для операций браузера, не охватываемых другими инструментами. Используйте для обработки встроенного диалога, оценки на уровне iframe, управления файлами cookie/сети или любого глагола CDP, который нужен агенту.
Доступно только тогда, когда конечная точка CDP доступна в начале сеанса — это означает, что /browser connect подключен к работающему Chrome или browser.cdp_url установлен в config.yaml. Режим локального агента-браузера по умолчанию, Camofox и облачные провайдеры (Browserbase, Browser Use, Firecrawl) в настоящее время не предоставляют CDP для этого инструмента — облачные провайдеры имеют URL-адреса CDP для каждого сеанса, но маршрутизация в реальном времени является последующим шагом.
Ссылка на метод CDP: https://chromedevtools.github.io/devtools-protocol/ — агент может web_extract на странице конкретного метода искать параметры и возвращать форму.
Общие шаблоны:
# List tabs (browser-level, no target_id)
browser_cdp(method="Target.getTargets")
# Handle a native JS dialog on a tab
browser_cdp(method="Page.handleJavaScriptDialog",
params={"accept": true, "promptText": ""},
target_id="<tabId>")
# Evaluate JS in a specific tab
browser_cdp(method="Runtime.evaluate",
params={"expression": "document.title", "returnByValue": true},
target_id="<tabId>")
# Get all cookies
browser_cdp(method="Network.getAllCookies")
В методах уровня браузера (Target.*, Browser.*, Storage.*) target_id опускается. Методы уровня страницы (Page.*, Runtime.*, DOM.*, Emulation.*) требуют target_id от Target.getTargets. Каждый вызов без сохранения состояния независим — сеансы не сохраняются между вызовами.
Интерфейсы iframe с перекрестным происхождением: передайте frame_id (от browser_snapshot.frame_tree.children[], где is_oopif=true) для маршрутизации вызова CDP через сеанс реального времени супервизора для этого iframe. Вот как Runtime.evaluate внутри iframe с перекрестным происхождением работает в Browserbase, где соединения CDP без сохранения состояния достигают истечения срока действия подписанного URL-адреса. Пример:
browser_cdp(
method="Runtime.evaluate",
params={"expression": "document.title", "returnByValue": True},
frame_id="<frame_id from browser_snapshot>",
)
Для iframe того же происхождения frame_id не требуется — вместо этого используйте document.querySelector('iframe').contentDocument из Runtime.evaluate верхнего уровня.
browser_dialog
Отвечает на собственный диалог JS (alert / confirm / prompt / beforeunload). До появления этого инструмента диалоговые окна молча блокировали поток JavaScript на странице, а последующие вызовы browser_* зависали или выдавали ошибки; теперь агент видит ожидающие диалоги в выходных данных browser_snapshot и явно отвечает.
Рабочий процесс:
1. Позвоните browser_snapshot. Если диалоговое окно блокирует страницу, оно отображается как pending_dialogs: [{"id": "d-1", "type": "alert", "message": "..."}].
2. Позвоните browser_dialog(action="accept") или browser_dialog(action="dismiss"). Для диалоговых окон prompt() передайте prompt_text="...", чтобы предоставить ответ.
3. Повторный снимок — pending_dialogs пуст; поток JS на странице возобновился.
Обнаружение происходит автоматически через постоянный супервизор CDP — один WebSocket на каждую задачу, которая подписывается на события Page/Runtime/Target. Супервизор также заполняет поле frame_tree в снимке, чтобы агент мог видеть структуру iframe текущей страницы, включая iframe перекрестного происхождения (OOPIF).
Матрица доступности:
Бэкэнд
Обнаружение через pending_dialogs
Ответ (browser_dialog инструмент)
Локальный Chrome через /browser connect или browser.cdp_url
✓
✓ полный рабочий процесс
База браузеров
✓
✓ полный рабочий процесс (через введенный мост XHR)
Camofox / локальный браузер-агент по умолчанию
✗
✗ (без конечной точки CDP)
Как это работает в Browserbase. Прокси-сервер CDP Browserbase автоматически отклоняет настоящие собственные диалоги на стороне сервера в течение ~10 мс, поэтому мы не можем использовать Page.handleJavaScriptDialog. Супервизор внедряет небольшой скрипт через Page.addScriptToEvaluateOnNewDocument, который переопределяет window.alert/confirm/prompt с помощью синхронного XHR. Мы перехватываем эти XHR через Fetch.enable — поток JS страницы остается заблокированным в XHR до тех пор, пока мы не вызовем Fetch.fulfillRequest с ответом агента. prompt() возвращает значения обратно на страницу JS без изменений.
Политика диалога настраивается в config.yaml под browser.dialog_policy:
Политика
Поведение
must_respond (по умолчанию)
Захватите, сделайте снимок, дождитесь явного вызова browser_dialog(). Безопасное автоматическое отклонение после browser.dialog_timeout_s (по умолчанию 300 с), чтобы агент с ошибками не мог простаивать вечно.
auto_dismiss
Схватить, немедленно уволить. Агент по-прежнему видит диалог в истории browser_state, но ему не нужно ничего предпринимать.
auto_accept
Захватите, примите немедленно. Полезно при навигации по страницам с агрессивными подсказками beforeunload.
Дерево кадров внутри browser_snapshot.frame_tree ограничено 30 кадрами и глубиной OOPIF 2, чтобы ограничить полезную нагрузку на страницах с большим количеством рекламы. Флаг truncated: true появляется при достижении пределов; агенты, которым требуется полное дерево, могут использовать browser_cdp с Page.getFrameTree.
Автоматически записывать сеансы браузера в виде видеофайлов WebM:
browser:record_sessions:true# default: false
Если этот параметр включен, запись начинается автоматически с первого browser_navigate и сохраняется в ~/.hermes/browser_recordings/ при закрытии сеанса. Работает как в локальном, так и в облачном (браузерном) режимах. Записи старше 72 часов автоматически удаляются.
Особенности скрытности
Browserbase предоставляет автоматические возможности скрытности:
Особенность
По умолчанию
Заметки
Базовая скрытность
Всегда включен
Случайные отпечатки пальцев, рандомизация области просмотра, решение CAPTCHA
Резидентные прокси
Вкл
Маршруты через резидентные IP-адреса для лучшего доступа
Продвинутая скрытность
Выкл.
Пользовательская сборка Chromium, требуется Scale Plan
Оставайся в живых
Вкл
Переподключение сеанса после сбоев в сети
:::примечание
Если платные функции недоступны в вашем плане, Hermes автоматически отступает — сначала отключая keepAlive, а затем прокси — поэтому просмотр по-прежнему работает на бесплатных планах.
Управление сеансами
Каждая задача получает изолированный сеанс браузера через Browserbase.
Сеансы автоматически очищаются после бездействия (по умолчанию: 2 минуты).
Фоновый поток каждые 30 секунд проверяет наличие устаревших сеансов.
Аварийная очистка запускается при выходе из процесса для предотвращения потерянных сеансов.
Сеансы выпускаются через API-интерфейс Browserbase (REQUEST_RELEASE status)
Ограничения
Взаимодействие на основе текста — основано на дереве доступности, а не на пиксельных координатах.
Размер снимка – большие страницы могут быть обрезаны или объединены в LLM до 8000 символов.
Тайм-аут сеанса — срок действия облачных сеансов истекает в зависимости от настроек плана вашего провайдера.
Стоимость — облачные сеансы потребляют кредиты провайдера; сеансы автоматически очищаются по окончании разговора или после бездействия. Используйте /browser connect для бесплатного локального просмотра.
Нет загрузки файлов — невозможно загрузить файлы из браузера.