Браузерные агенты на Python - как заставить нейросеть кликать по сайтам и автоматизировать любую рутину
Любой разработчик, писавший парсеры или скрипты автоматизации на Selenium и Playwright, знает это чувство бессилия.
Вы потратили три дня на написание селекторов, настроили авторизацию, запустили скрипт в крон, а через неделю верстальщик сайта меняет название CSS-класса с btn-primary на button_submit_v2. Еще через неделю маркетологи выкатывают всплывающий баннер с промокодом, который перекрывает кнопку оформления заказа.
Скрипт падает с ошибкой ElementNotInteractableException. Все приходится переписывать с нуля.
Браузерные агенты на базе зрительных языковых моделей (Vision LLM) решают задачу принципиально иначе. Модель не разбирает километры обфусцированного HTML-кода. Она смотрит на скриншот страницы глазами человека, находит нужные элементы по смыслу и сама решает, как обойти препятствия.
Мы протестировали открытый фреймворк browser-use. Разбираем механику визуального управления и пишем готового автономного агента на Python.
Как это устроено - метод маркировки элементов
Попытка скормить модели сырой DOM-дерево современной веб-страницы на React или Vue - верный способ сжечь сто тысяч токенов за один запрос. Большая часть разметки - это служебные теги, скрипты и стили Tailwind, которые не несут смысловой нагрузки.
Фреймворк browser-use использует технологию разметки визуальных меток (Set-of-Marks):
- Библиотека Playwright открывает страницу в браузере Chromium.
- Специальный JavaScript-скрипт находит все кликабельные элементы (кнопки, ссылки, поля ввода, выпадающие списки) и накладывает поверх них маленькие цветные плашки с номерами (1, 2, 3...).
- Делается скриншот страницы с наложенными номерами, а из разметки вычищается весь мусор, оставляя компактное дерево только интерактивных узлов.
- Скриншот и дерево отправляются в модель со зрением.
Модель анализирует изображение и отдает одну из базовых команд:
- click(index=14) - кликнуть по элементу с номером 14.
- input_text(index=8, text="RTX 4090") - ввести текст в поле 8.
- scroll_down(amount=500) - прокрутить страницу вниз.
- switch_tab(page_id=2) - переключить вкладку.
Кстати, если вы хотите протестировать все самые свежие модели уровня Claude Sonnet 5, GPT-5.6 или Gemini 3 в одном удобном месте и сравнить их ответы без костылей с иностранными картами - на платформе SYNTX.AI это можно сделать за пару кликов.
Движок выполняет действие, делает новый скриншот и снова отдает управление модели, пока задача не будет выполнена.
Если на экране выскочил рекламный баннер, агент сам находит крестик, кликает по нему и продолжает выполнение основного сценария.
Пишем первого агента за тридцать строк
Для запуска потребуется Python 3.11+, пакет browser-use и установленные браузерные движки Playwright.
Ставим зависимости:
Создаем скрипт agent.py:
Запускаем:
В открывшемся окне браузера видно, как агент сам находит поисковую строку, кликает по статьям, листает страницы и собирает финальный результат в консоль.
Боевой сценарий - сохранение авторизации и сбор данных
Если сайту требуется вход по логину и паролю, заставлять модель вводить пароль на каждом шаге небезопасно и дорого по токенам.
Правильное инженерное решение - использовать постоянный профиль браузера (user_data_dir). Вы один раз авторизуетесь на нужных сайтах вручную, сохраняете куки и сессию, а агент использует уже готовый авторизованный профиль.
Обновляем конфигурацию браузера:
Теперь агент может заходить в закрытые партнерские кабинеты, корпоративные CRM или почту без повторной авторизации и ввода SMS-кодов.
Собственно, если вам нужно выгрузить миллион карточек товаров из открытого каталога - забудьте про агентов, пишите старый добрый асинхронный парсер на aiohttp. Иначе вы разоритесь на токенах за скриншоты в первый же час.
Но если вам нужно раз в сутки зайти в три закрытых партнерских кабинета без API, нажать пять кнопок в вечно меняющемся интерфейсе, собрать отчет и отправить в рабочий чат - браузерный агент закрывает эту головную боль навсегда.