Работаем с ZennoBrowser и ZennoPoster через CDP и WebSocket
Вступление
AI-агенты и инструменты автоматизации браузера умеют многое: открывать сайты, нажимать кнопки, вводить текст, читать страницы, выполнять JavaScript и собирать данные.
Но часто у них есть одна проблема: они запускают свой собственный «чистый» Chromium. В нем нет ваших cookies, авторизации, истории, прокси и настроенного fingerprint. Для простых задач этого хватает, но сайты с антибот-защитой такие сессии часто распознают как автоматизацию.
Другой подход — не запускать новый браузер, а подключаться к уже подготовленному браузеру ZennoBrowser или ZennoPoster. В этом браузере уже могут быть:
- нужный профиль;
- cookies и авторизация;
- прокси;
- антидетект-настройки;
- открытые вкладки;
- прогретая сессия.
Подключение делается через CDP и WebSocket. На практике это одна строка вида:
ws://127.0.0.1:61963/devtools/browser/c11b9b2c-4114-4bdd-af71-2398513143b2
Эту строку можно передать Playwright, Puppeteer, Browser-use, MCP-серверу или собственному AI-агенту.
Что такое CDP и WebSocket
CDP расшифровывается как Chrome DevTools Protocol. Это протокол управления Chromium-браузером.
Если говорить проще, CDP — это «пульт управления» браузером. Через него внешняя программа может делать почти то же, что делает пользователь:
- открывать страницы;
- кликать по элементам;
- вводить текст;
- выполнять JavaScript;
- читать DOM;
- делать скриншоты;
- смотреть сетевые запросы;
- работать с cookies, localStorage и вкладками.
Именно через CDP работают Chrome DevTools, Playwright, Puppeteer и многие инструменты для браузерной автоматизации.
WebSocket — это постоянное соединение между программой и браузером. Через него программа отправляет команды браузеру и сразу получает ответы или события.
Обычно CDP-адрес выглядит так:
ws://127.0.0.1:<port>/devtools/browser/<id>
Где:
127.0.0.1— означает, что подключение локальное, на этом же компьютере;<port>— порт, который браузер открыл для CDP;<id>— идентификатор конкретного экземпляра браузера.
Важно: порт обычно меняется при каждом запуске браузера. Не нужно хардкодить 9222 или любой другой порт. Всегда берите готовую строку подключения из ZennoBrowser или ZennoPoster.
Как получить WebSocket в ZennoBrowser
В ZennoBrowser WebSocket-строка возвращается при создании браузерного инстанса через Public API. Сам метод создания инстанса подробно описан в документации ZennoBrowser:
После успешного запуска API возвращает данные инстанса. В ответе есть поле:
{
"profileId": "1485fd76-34cc-457f-a77e-34c7d2b8403e",
"processId": 6752,
"connectionString": "ws://127.0.0.1:61963/devtools/browser/c11b9b2c-4114-4bdd-af71-2398513143b2"
}
Нужная WebSocket-строка находится в:
"connectionString"
Именно ее нужно передавать внешним инструментам.
Не копируйте порт из примеров вручную. Берите весь connectionString из ответа API: порт и идентификатор браузера могут меняться при каждом запуске.
Как получить WebSocket в ZennoPoster
В ZennoPoster WebSocket-строка доступна из C#-кода проекта через свойство:
instance.WsConnectionString
Пример:
string ws = instance.WsConnectionString;
project.SendInfoToLog(ws);
После выполнения в лог будет выведен адрес вида:
ws://127.0.0.1:<port>/devtools/browser/<id>
Дальше эту строку можно передать во внешний скрипт, AI-агенту, MCP-серверу или любому инструменту, который умеет подключаться к браузеру через CDP.