Безопасность и правоAPI / Продукт · В работуHabr AI→ оригинал

Локальная LLM собрала объявления через DOM и остановилась после шестого запроса

Локальную Qwen класса 7B/8B превратили в браузерного агента для поиска редкого оборудования на сайте объявлений. Вместо запросов к API модель управляла обычным Edge через Playwright, находила карточки по ценам и ID, а затем связывала разнесённые по DOM данные. На шестом заходе площадка вернула 429, после чего агент прекратил обращения и собрал отчёт из локального буфера. Это полезный PoC, но не доказательство универсального обхода защиты.

AI-обработка оригинала Habr AI; редакция Hamidun News
Локальная LLM собрала объявления через DOM и остановилась после шестого запроса
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Ключевой факт #1Текстовые маркеры переживают смену CSS-классов, но требуют проверки.
Лимит 429 показалбраузер не отменяет правила и ограничения площадки.
Ключевой факт #3Для продакшена нужны разрешение, лимиты запросов, логи и ручной контроль.

Обычный парсер сайта объявлений часто ломается ещё до первой полезной строки: сервер отвечает 403, ограничивает частоту запросов или отдаёт страницу, которую собирает JavaScript. Автор эксперимента попробовал другой путь — поручил локальной Qwen класса 7B/8B работать с сайтом через обычный браузер и извлекать данные не по хрупким CSS-классам, а по смысловым признакам.

На простом примере задача выглядела так: найти редкую мобильную рабочую станцию с определённой видеокартой, собрать название, цену, город и ссылку на продавца. Агент открывал выдачу в Edge под управлением Playwright, просматривал DOM и искал знакомые опорные точки: знак валюты, крупный соседний текст и идентификатор объявления в ссылке. Если сведения о продавце находились в другом участке страницы, записи связывались по Item ID.

Почему DOM оказался полезнее CSS

Современный интерфейс может менять имена классов после каждого обновления. Селектор, который работал вчера, завтра возвращает пустой список. Текстовые признаки устойчивее: цена всё ещё содержит обозначение валюты, карточка ведёт на уникальный адрес, а название остаётся рядом с ценой в структуре страницы.

Агент использовал эти признаки как ориентиры. Сначала находил узел с ценой, затем поднимался к контейнеру карточки, извлекал заголовок и ссылку, после чего сопоставлял дополнительные поля по идентификатору. Такой подход напоминает работу человека: мы тоже не знаем имя CSS-класса кнопки, но понимаем её назначение по тексту и положению.

Есть и более интересный результат. В одном объявлении заголовок обещал старшую видеокарту, а описание указывало младшую модель с 16 ГБ памяти. Агент заметил расхождение и пометил карточку для ручной проверки. Для продуктовой команды это важнее красивой демонстрации автономности: модель не просто переносила строки, а проверяла согласованность данных внутри объявления.

Где эксперимент упёрся в реальность

На шестом обращении площадка вернула ошибку 429 — слишком много запросов. Агент прекратил новые обращения и сформировал отчёт из уже сохранённых данных. Это разумное поведение, однако оно одновременно разрушает громкий тезис о «победе» над антифродом. Запуск обычного браузера не делает систему неуязвимой: площадка по-прежнему видит частоту действий и может ограничить доступ.

Заявленная автором стопроцентная точность сопоставления также не подтверждена независимым тестом. Неизвестны размер выборки, число пропущенных карточек и доля ошибок на других страницах. В эксперименте были интерактивная отладка и ручное наблюдение, поэтому называть систему полностью автономной рано.

Есть и правовая граница. Техническая возможность прочитать страницу не означает разрешения на массовый сбор данных. Перед запуском нужно проверить условия площадки, robots.txt, допустимую нагрузку и правила обработки персональных данных. Механизмы защиты нельзя считать досадной помехой, которую следует скрытно обходить.

Что взять разработчику

Ценность работы — не в рецепте обхода блокировок, а в архитектурном приёме. Для разрешённых сценариев браузерный агент может сочетать три уровня: визуальную проверку скриншота, разбор DOM по смысловым маркерам и локальный буфер, позволяющий корректно завершить работу после ошибки.

В продакшене к этому нужны жёсткие лимиты частоты, повторные попытки с увеличивающейся задержкой, журнал действий, проверка полноты выборки и ручное подтверждение спорных результатов. Начинать стоит на собственном сайте или в тестовой среде, где есть явное разрешение на автоматизацию.

Практический вывод простой: небольшая локальная LLM уже способна управлять браузером и собирать структурированные данные с динамической страницы. Но хороший агент определяется не умением любой ценой пройти защиту, а способностью соблюдать ограничения, замечать противоречия и безопасно останавливаться, когда сайт говорит «достаточно».

Сюжет

Вопросы и ответы по материалу

Что известно по теме: почему DOM оказался полезнее CSS?

Современный интерфейс может менять имена классов после каждого обновления. Селектор, который работал вчера, завтра возвращает пустой список. Текстовые признаки устойчивее: цена всё ещё содержит обозначение валюты, карточка ведёт на уникальный адрес, а название остаётся рядом с ценой в структуре страницы. Агент использовал эти признаки как ориентиры. Сначала находил узел с ценой, затем поднимался к контейнеру карточки, извлекал заголовок и ссылку, после чего сопоставлял дополнительные поля по идентификатору.

Что известно по теме: где эксперимент упёрся в реальность?

На шестом обращении площадка вернула ошибку 429 — слишком много запросов. Агент прекратил новые обращения и сформировал отчёт из уже сохранённых данных. Это разумное поведение, однако оно одновременно разрушает громкий тезис о «победе» над антифродом. Запуск обычного браузера не делает систему неуязвимой: площадка по-прежнему видит частоту действий и может ограничить доступ. Заявленная автором стопроцентная точность сопоставления также не подтверждена независимым тестом.

Что известно по теме: что взять разработчику?

Ценность работы — не в рецепте обхода блокировок, а в архитектурном приёме. Для разрешённых сценариев браузерный агент может сочетать три уровня: визуальную проверку скриншота, разбор DOM по смысловым маркерам и локальный буфер, позволяющий корректно завершить работу после ошибки. В продакшене к этому нужны жёсткие лимиты частоты, повторные попытки с увеличивающейся задержкой, журнал действий, проверка полноты выборки и ручное подтверждение спорных результатов.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Единое AI-пространство · Nomad

Протестируйте новые LLM и мультимодальные модели в одном окне

Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.

Открыть Nomad AI →Автономный Nomad Agent
Что вы думаете?
Загружаем комментарии…