Браузерный агент: когда нужен, как думать о надёжности, чем опасен
Vision-агенты, которые кликают по сайтам, — самый хайповый тренд автоматизации 2026. Разбираем, когда они действительно нужны (не всегда), в чём разница между DOM- и vision-подходами, почему «нажал — жду 2 секунды» почти всегда ломается и какие границы обязательно ставить до запуска в прод.
СреднийЭкспериментальное35 минbrowser-use, Playwright, Claude Vision
1
Когда браузер, а когда API или скрейпинг
Задача: каждый понедельник экспортировать отчёт из трёх SaaS и свести в одну таблицу. Путь первый — API: у одной системы есть, у второй только Enterprise, у третьей нет. Путь второй — scraping: работает, пока вёрстка не поменяется, а потом ломается молча. Путь третий — браузерный агент, который буквально открывает сайт, кликает кнопки и скачивает файл.
Где агент выигрывает? Когда нет API, когда UI стабильный для человека, но нестабильный в разметке, когда шаги зависят от контекста («всплыло уведомление — закрой»). Где проигрывает? Когда нужна скорость (в 10–100 раз медленнее API), когда нужны тысячи повторов в час, когда отладка каждого шага стоит дороже, чем написать интеграцию.
Когда брать браузерный агент?
API нет или только Enterprise за большие деньги
UI стабилен для человека, разметка часто меняется
Шаги зависят от контекста (попапы, уведомления)
Нужно 1000+ операций в час
Есть стабильный API с разумной ценой
Требуется миллисекундный отклик
Перед тем как писать агента, потратьте 15 минут на поиск API. Даже платная API-интеграция почти всегда дешевле в эксплуатации, чем агент — потому что агент ломается молча, а API громко.
2
Две школы: пиксели против DOM
Браузерные агенты делятся на две школы. Первая — vision-based: агент делает скриншот, LLM с vision смотрит на картинку и решает «кликни на жёлтую кнопку справа». Вторая — DOM-based: агент извлекает структуру страницы, LLM решает «нажми элемент с id=submit», фреймворк вызывает обработчик.
Vision работает там, где DOM не помогает: canvas, сложный SVG, элементы поверх картинки. Но дороже, медленнее и галлюцинирует координаты на свежих лайаутах. DOM быстрее и точнее, но слепнет на визуальных элементах без семантики.
Современные фреймворки (browser-use, Stagehand) комбинируют оба подхода: DOM как базовый слой, vision — как страховка для сложных мест.
🖼️ Vision-based
- Видит то же, что человек
- Работает на canvas и сложной графике
- Дорого: vision-токены, галлюцинации
🏗️ DOM-based
- Точные селекторы, быстро, дёшево
- Хорошо на обычных сайтах
- Слепнет на canvas и картинках
Начинайте с DOM-first фреймворка и добавляйте vision только там, где DOM не справляется. Обратный путь (сначала vision, потом оптимизировать) обходится в 5–10 раз дороже — и вы не увидите разницы, пока не придёт счёт.
3
Главная проблема — не клики, а определение успеха
Агент нажал «Submit». Задача выполнена? Не факт. Может, появилась ошибка валидации. Может, загрузился спиннер, и настоящий результат будет через 5 секунд. Может, страница ушла в редирект, и то, что вы видите — уже совсем другая страница. Главный источник багов в браузерных агентах — не клики, а понимание, что именно произошло после клика.
Наивный подход — «после клика подожди 2 секунды». Ломается на первом же медленном ответе. Чуть лучше — ждать появления конкретного элемента. Но на что ждать? Если после Submit должна появиться надпись «Спасибо за заказ», а её нет — это ошибка или просто ещё не отрисовалось?
Правильный паттерн — явные критерии успеха для каждого шага. «После Submit должен появиться либо элемент X (успех), либо элемент Y (ошибка). Жду до 10 секунд. Если ничего — непонятное состояние, эскалация.» Без этого агент накапливает ошибку на каждом шаге, и через три шага уже кликает вслепую.
Золотое правило: каждый шаг агента должен иметь предикат проверки, а не фиксированную задержку.
Добавляйте «неизвестное состояние» как полноценный исход. Успех и ошибка — два известных пути, но в вебе реальность часто третья: модалка, которую вы не предвидели, reCAPTCHA, exit-intent popup. Агент должен признавать «я не понимаю», а не кликать наугад.
4
Когда агент сломался — чините не код, а верхний слой
Когда браузерный агент ломается, первое желание — починить код: добавить таймаут, обработчик, try/catch. Почти всегда это неправильный слой.
Большинство провалов — это либо проблема инструкции (агент не понимает задачу), либо проблема детерминизма среды (попап, A/B-тест, сбой сети). Чинится сверху, не в коде.
Инструкция: явно описывайте помехи. «Если появился cookie-попап — закрой. reCAPTCHA — остановись и позови человека. A/B-версия — ищи кнопку по тексту, не по селектору.» Правки на две минуты, экономия часов отладки.
Детерминизм: preparation-фаза перед стартом. Очистить cookies, установить локаль, прокинуть session token. Чем меньше сюрпризов — тем реже агент ломается посреди задачи.
Агент сломался
Диагностика
Проблема инструкции
Обновить промпт
Проблема среды
В prep-фазу
Проблема кода (редко)
Править логику
Ведите changelog помех, с которыми сталкивался агент. Это не документация для других — это корпус данных, который делает ваш промпт всё более устойчивым со временем. Через месяц 90% новых запусков проходят с первого раза.
5
Браузер — не песочница. Дайте агенту границы
Последняя тема — и самая важная. У браузерного агента есть доступ к интернету, вашим куки, вкладкам, буферу обмена. Одна ошибка — и агент логинится в чужой аккаунт, публикует пост вместо draft, отправляет деньги не туда.
Базовое правило: никакого прод-доступа по умолчанию. Изолированная сессия — свежий профиль браузера, sandbox, прокси, тестовый аккаунт. Прод-креды — только после того, как убедились, что агент делает что нужно.
Второе: явные границы. Whitelist доменов, подтверждение на оплату/удаление/отправку, лог каждого шага с timestamp и скриншотом. Никогда не давайте полный доступ к кошельку или главному аккаунту — тесты покрывают известное, прод приносит неизвестное.
Чеклист безопасного запуска
Изолированный профиль браузера или sandbox
Whitelist разрешённых доменов
Подтверждение человека на деньги, удаление, отправку
Логирование шагов со скриншотами и намерением
Главный аккаунт с полными правами доступа
Запуск на рабочем профиле без изоляции
Сделайте dry-run по умолчанию: агент описывает в логе, что СОБИРАЕТСЯ сделать, но не делает. Посмотрите 5–10 прогонов, убедитесь, что план адекватный — только тогда включайте реальные действия. Это экономит один инцидент в месяц.
Результат
Браузерный агент для задач, где нет API: три решения приняты до запуска — нужен ли он вообще (не всегда), какая школа (DOM-first + vision как страховка), как проверять успех каждого шага (предикаты, не задержки). Запущен в изолированной среде с whitelist и dry-run, потому что браузер — не песочница.