Ornold
Назад в блог
Технологии6 мин чтения

Vision-first против CSS-селекторов: почему клики по координатам надежнее

Селекторы ломаются при любом изменении разметки. Vision-анализ держит автоматизацию стабильной, находя элементы по скриншотам, а не по хрупким DOM-путям.
8 апр. 2026 г.

Проблема селекторов в антидетект-рабочих процессах

CSS-селекторы — это стандартный способ, которым инструменты автоматизации находят элементы на странице. Вы пишете путь вроде `button.submit-btn` или `#login-form input[name="email"]`, и скрипт кликает или заполняет его. Это работает, пока разметка не изменится — а в антидетект-рабочих процессах разметка меняется постоянно.
Разные браузер-профили могут видеть разные версии страницы. A/B-тесты, геотаргетированные макеты, баннеры согласия, вызовы обнаружения ботов и динамические имена классов — всё это смещает DOM между сессиями. Селектор, который работает в профиле #1, может не существовать в профиле #12.

Почему селекторы ломаются чаще, чем вы думаете

  • Динамические имена классов — Фреймворки вроде React, Next.js и Tailwind генерируют хешированные или утилитарные классы, которые меняются между сборками. Селектор, нацеленный на `.css-1a2b3c`, перестаёт работать после следующего развёртывания.
  • A/B-тестирование — Один и тот же URL может выдавать совершенно разные DOM-структуры разным посетителям. Ваш селектор предполагает один вариант; страница показывает другой.
  • Баннеры согласия и cookies — Эти оверлеи внедряют новые элементы, смещают z-индексы и иногда оборачивают всю страницу в контейнер, которого не было, когда вы писали селектор.
  • Оверлеи обнаружения ботов — Cloudflare-вызовы, DataDome-интерстициалы и подобные системы заменяют содержимое страницы своей разметкой. Никакая настройка селектора не поможет, когда самой страницы больше нет.
  • Различия по локали и геолокации — RTL-макеты, переведённый текст кнопок и региональные компоненты UI — всё это меняет дерево DOM.
В однобраузерном скрипте вы замечаете и исправляете эти проблемы одну за другой. В пакете из 50 профилей сломанный селектор молча не срабатывает в десятках сессий, прежде чем кто-то это заметит.

Как работает взаимодействие, ориентированное на зрение

Ориентированное на зрение означает, что ИИ делает снимок экрана страницы и анализирует его визуально — так же, как человек смотрит на экран. Вместо поиска в DOM конкретного селектора он определяет элементы по их внешнему виду: "синяя кнопка Sign Up в центре страницы".
Процесс прямолинеен:
  • Сделать снимок экрана текущего состояния страницы
  • Отправить его модели зрения, которая определяет интерактивные элементы и их позиции
  • Вернуть нормализованные ограничивающие прямоугольники (координаты) для каждого обнаруженного элемента
  • Кликнуть, навести или взаимодействовать, используя эти координаты — поиск в DOM не требуется
// Vision-first click flow await browser_parallel_navigate({ url: "https://target.example/signup" }); const grouped = await browser_parallel_vision_analyze_grouped(); // AI identifies elements visually across all active browsers // Returns normalized bounding boxes for each element await browser_parallel_click_normalized_box({ box: signUpButton.box });

Клики по координатам vs клики по селекторам

Клик по селектору говорит "найди элемент по этому пути в DOM и кликни его". Клик по координатам говорит "кликни в эту позицию на экране". Разница имеет значение, когда страницы расходятся.

Подход на основе селекторов

// Breaks if class name changes, element moves, or overlay appears await page.click("button.btn-primary.submit-action"); // Breaks if form structure changes await page.fill("#signup-form input[type=email]", "user@mail.com");

Подход на основе зрения

// Works regardless of class names, IDs, or DOM structure await browser_parallel_screenshot(); const analysis = await browser_parallel_vision_analyze_grouped(); // AI finds "Sign Up" button visually — same as a human would await browser_parallel_click_normalized_box({ box: analysis.signUp.box });
Подход на основе зрения не волнуют имена классов, ID или глубина вложенности. Если кнопка видна на экране, она будет найдена. Это особенно мощно в антидетект-сценариях, где каждый профиль может отрендерить немного другую страницу.

Групповой анализ для пакетных операций

При запуске 20+ браузер-профилей параллельно анализ зрения должен быть эффективным. Ornold использует групповой анализ — он берёт снимки экрана из всех активных сессий, отправляет их пакетом модели зрения и возвращает результаты для каждой сессии в одном вызове.
Это важно по двум причинам:
  • Эффективность — Один вызов API обрабатывает все сессии вместо N отдельных вызовов. Задержка остаётся примерно постоянной независимо от размера пакета.
  • Обработка расхождений — ИИ видит фактическое состояние каждой сессии. Если профиль #7 имеет оверлей CAPTCHA, а остальные показывают форму, групповой результат это отражает. Вы можете ветвить логику для каждой сессии вместо предположения, что все страницы выглядят одинаково.
// Grouped vision analysis across all active browsers const results = await browser_parallel_vision_analyze_grouped(); // results.groups shows which browsers are in which state // e.g., 15 browsers on the form, 3 on CAPTCHA, 2 on error page

Когда режим DOM всё ещё побеждает

Анализ зрения — не всегда правильный выбор. Взаимодействие на основе DOM (режим по умолчанию Ornold) быстрее, бесплатно и совершенно надёжно для структурированных страниц со стабильной разметкой.
Используйте режим DOM, когда:
  • Целевая страница имеет стабильный, предсказуемый HTML (например, ваше собственное приложение, известные платформы)
  • Вы заполняете формы с чёткими полями ввода и метками
  • Скорость важнее устойчивости — DOM-снимки мгновенны, анализ зрения занимает 1-3 секунды
  • Вы хотите избежать затрат на vision-кредиты
Используйте режим Vision, когда:
  • Страницы различаются между профилями (A/B-тесты, геотаргетирование, динамические макеты)
  • Вы имеете дело с canvas-интерфейсами, страницами, богатыми изображениями, или пользовательскими веб-компонентами
  • Селекторы постоянно ломаются и стоимость обслуживания высока
  • Вам нужно проверить, как на самом деле выглядит страница (визуальный QA)
Вы можете включить оба режима одновременно. ИИ-агент автоматически выбирает лучший подход для каждого действия — DOM для простого заполнения форм, зрение для сложных или непредсказуемых страниц.

Сравнение в реальном мире

Вот что происходит на практике при запуске потока регистрации в 30 сессиях Linken Sphere:

Автоматизация на основе селекторов

  • 25 из 30 сессий завершаются успешно
  • 3 не срабатывают, потому что баннер согласия сместил макет формы
  • 1 не срабатывает, потому что Cloudflare выдал интерстициальную страницу
  • 1 не срабатывает, потому что сайт развернул новую версию во время запуска с другими именами классов
  • Итого: 83% успеха. Требуется ручное вмешательство для 5 сессий.

Автоматизация на основе зрения

  • 29 из 30 сессий завершаются успешно
  • 1 не срабатывает, потому что страница не загрузилась (timeout сети — не проблема селектора)
  • Баннеры согласия, смещения макета и изменения имён классов не имели никакого эффекта
  • Итого: 97% успеха. Требуется один повтор для timeout.
Разрыв увеличивается по мере роста размера пакета. При 50+ профилях автоматизация на основе селекторов обычно требует постоянного обслуживания. Автоматизация на основе зрения остаётся стабильной, потому что адаптируется к тому, что на самом деле на экране.

Настройка режима Vision в Ornold

Включите режим vision при подключении вашего ИИ-агента к Ornold MCP. В мастере панели управления выберите "Оба режима" на шаге 2, чтобы получить инструменты DOM + Vision. Или добавьте флаг вручную:
# Claude Code — enable both DOM and Vision modes claude mcp add --transport stdio ornold-browser -- npx ornold-mcp --token YOUR_TOKEN --mode both --linken-port 40080 # Codex — in config.toml [mcp_servers.ornold-browser] command = "npx" args = ["ornold-mcp", "--token", "YOUR_TOKEN", "--mode", "both", "--linken-port", "40080"]
Каждый анализ зрения стоит 1 кредит. DOM-снимки бесплатны. С включённым режимом "оба", ИИ-агент использует DOM по умолчанию и переключается на зрение только при необходимости.

Ключевые выводы

  • CSS-селекторы предполагают стабильный DOM. В антидетект-рабочих процессах DOM — всё, но не стабильный.
  • Взаимодействие, ориентированное на зрение, находит элементы по внешнему виду, а не по пути. Оно автоматически адаптируется к изменениям макета, оверлеям и A/B-тестам.
  • Групповой анализ зрения обрабатывает расхождения пакета — каждая сессия анализируется на основе её фактического состояния.
  • Режим DOM — всё ещё лучший выбор по умолчанию для скорости и стоимости. Используйте зрение, когда страницы непредсказуемы или селекторы постоянно ломаются.
  • Оба режима могут сосуществовать. Позвольте ИИ-агенту выбрать правильный инструмент для каждого действия.

Похожие материалы