Ornold
Назад в блог
Инженерия10 мин чтения

Как запускать десятки антидетект-браузеров параллельно и не терять синхронизацию

Разбираем групповый vision-анализ, восстановление статусов и контроль конкуренции, которые позволяют большим пачкам браузеров работать как единая система.
1 апр. 2026 г.

Проблема параллельной автоматизации браузеров

Запустить один браузер просто. Запустить 50 браузеров, делающих одно и то же одновременно — это совсем другая проблема. Страницы загружаются с разной скоростью, CAPTCHA появляется в одних сессиях, но не в других, и условия сети различаются между профилями. Без координации параллельный пакет быстро превращается в 50 независимых скриптов, которые расходятся.
Ornold рассматривает пакет браузеров как единую скоординированную систему. Каждое действие — навигация, заполнение форм, клики, решение CAPTCHA — выполняется во всех активных сессиях одновременно с встроенной обработкой расхождений и сбоев.

Как работает параллельное выполнение в Ornold

Когда вы говорите AI-агенту «открыть google.com во всех браузерах», Ornold не проходит по сессиям одну за другой. Он отправляет команду навигации всем активным сессиям параллельно через CDP (Chrome DevTools Protocol). То же самое применяется к кликам, заполнению форм, скриншотам и всем остальным действиям браузера.
// This navigates ALL active sessions simultaneously await browser_parallel_navigate({ url: "https://target.example/signup" }); // This fills the email field in ALL sessions at once // Each session can get a different value await browser_parallel_fill({ ref: "email", values: profiles.map(p => p.email) });
Префикс «parallel» в названиях инструментов — это не просто соглашение об именовании, это отражает реальную модель выполнения. Команды разветвляются на все сессии, выполняются одновременно, и результаты собираются перед следующим шагом.

Групповой визуальный анализ

Самая сложная часть параллельной автоматизации — знать, что находится на каждом экране. В пакете из 30 браузеров некоторые могут показывать форму регистрации, другие могут иметь CAPTCHA, а несколько могут быть застрявшими на экране загрузки. Вам нужно знать состояние каждой сессии перед тем, как решить, что делать дальше.
Групповой визуальный анализ Ornold решает эту проблему, делая скриншоты со всех сессий, анализируя их как пакет и группируя сессии по их визуальному состоянию:
// Analyze all sessions at once const analysis = await browser_parallel_vision_analyze_grouped(); // Results are grouped by page state: // group "signup_form": [session1, session2, ... session25] // group "captcha": [session26, session27, session28] // group "error_page": [session29] // group "loading": [session30]
Это принципиально отличается от проверки каждой сессии отдельно. Один вызов API дает вам полную картину. AI-агент может затем разветвить логику: решить CAPTCHA для сессий, которые это требуют, повторить навигацию для тех, которые не удались, и продолжить поток для тех, которые готовы.
Групповой анализ особенно ценен, когда страницы расходятся из-за A/B-тестов, геотаргетинга или обнаружения ботов. Вместо предположения, что все сессии находятся в одном состоянии, вы видите реальность каждой из них.

Ограниченная параллелизм

Запуск 50 браузеров в истинном параллелизме звучит хорошо, пока вы не столкнетесь с ограничениями ресурсов. Каждая сессия браузера потребляет CPU, память и пропускную способность сети. Вызовы визуального анализа имеют ограничения частоты API. Сервисы решения CAPTCHA ограничивают одновременные запросы.
Ornold использует ограниченный параллелизм — он обрабатывает сессии в контролируемых пакетах, а не запускает все сразу:
  • Действия браузера (навигация, клик, заполнение) — выполняются во всех сессиях одновременно. Это легкие CDP-команды, которые не нагружают ресурсы.
  • Визуальный анализ — обрабатывается группами (по умолчанию: 12 за раз). Скриншоты делаются параллельно, но вызовы анализа группируются, чтобы оставаться в пределах лимитов API.
  • Решение CAPTCHA — запросы отправляются параллельно, но сервис решения естественным образом ограничивает на основе емкости. Ornold обрабатывает очередь.
  • Скриншоты — захватываются одновременно со всех сессий. Данные изображений передаются потоком, а не буферизируются в памяти.
// Control concurrency for vision analysis await browser_parallel_vision_analyze_grouped({ maxConcurrency: 12 }); // For very large batches, you can lower concurrency // to reduce memory pressure await browser_parallel_vision_analyze_grouped({ maxConcurrency: 6 });

Отслеживание статуса и восстановление

В любой пакетной операции некоторые сессии будут неудачными. Страница может не загрузиться, CAPTCHA может истечь, или отправка формы может вернуть ошибку. Вопрос в том: как вы обнаруживаете сбои и восстанавливаетесь без перезапуска всего пакета?
Ornold предоставляет отслеживание статуса в реальном времени для каждой активной сессии:
// Check the state of all sessions const status = await browser_status(); // Returns per-session info: // { id: "session-1", url: "https://target.example/dashboard", state: "ready" } // { id: "session-2", url: "https://target.example/signup", state: "ready" } // { id: "session-3", url: "about:blank", state: "error" }
Имея данные о статусе, AI-агент может принимать решения о восстановлении:
  • Сессии на неправильной странице — повторно перейти на целевой URL
  • Сессии с CAPTCHA — запустить решатель CAPTCHA только для этих сессий
  • Сессии с ошибками — сделать скриншот для диагностики, затем повторить или пропустить
  • Сессии, которые впереди — подождать, пока более медленные сессии наверстают упущенное перед следующим пакетным действием

Синхронизация сессий

Самая большая проблема в параллельной автоматизации — это не запуск 50 браузеров, а их синхронизация по мере развития рабочего процесса. Разные страницы загружаются с разной скоростью. Некоторые сессии попадают на ограничения частоты. Другие перенаправляются.
Ornold использует семантику ожидания всех: после каждого параллельного действия он ждет, пока все сессии завершатся (или истечет время ожидания) перед переходом к следующему шагу. Это предотвращает опережение быстрых сессий медленными.
// Navigate all sessions await browser_parallel_navigate({ url: "https://target.example/signup" }); // Wait until all sessions show the signup form await browser_parallel_wait_for({ text: "Create Account", timeoutMs: 15000 }); // Only proceeds when ALL sessions are ready (or timed out) // Now fill forms — all sessions are on the same page await browser_parallel_fill({ ref: "email", values: emails });
Время ожидания в `wait_for` действует как предохранительный клапан. Если сессия не может достичь ожидаемого состояния в течение времени ожидания, она помечается, а не блокирует весь пакет навсегда.

Данные для каждого профиля в пакетных операциях

Параллельность не означает идентичность. Каждый профиль браузера обычно требует уникальные данные — разные адреса электронной почты, имена, пароли или другие значения форм. Ornold поддерживает значения для каждой сессии в пакетных командах:
// Each session gets its own email await browser_parallel_fill({ ref: "email", values: [ "user1@mail.com", "user2@mail.com", "user3@mail.com", // ... one per active session ] }); // Each session gets its own password await browser_parallel_fill({ ref: "password", values: profiles.map(p => p.password) });
Массив значений отображается 1:1 на активные сессии по порядку. Если у вас есть 30 активных сессий, вы предоставляете 30 значений. Это сохраняет модель параллельного выполнения, позволяя полную настройку для каждого профиля.

Полный параллельный рабочий процесс

Вот реалистичный сквозной поток для регистрации учетных записей на 30 профилях антидетект-браузера:
// 1. Start sessions and navigate await browser_list(); // See available profiles await browser_parallel_navigate({ url: "https://target.example/signup" }); await browser_parallel_wait_for({ text: "Create Account", timeoutMs: 15000 }); // 2. Fill forms with per-profile data await browser_parallel_fill({ ref: "email", values: emails }); await browser_parallel_fill({ ref: "password", values: passwords }); await browser_parallel_fill({ ref: "name", values: names }); // 3. Solve CAPTCHAs (detected and solved across all sessions) await browser_solve_captcha(); // 4. Submit await browser_parallel_click({ ref: "submit" }); // 5. Verify results await browser_parallel_wait_for({ text: "Welcome", timeoutMs: 20000 }); const status = await browser_status(); // Check which sessions succeeded and which need recovery

Советы по масштабированию

  • Начните с 5-10 сессий для проверки рабочего процесса, затем масштабируйте. Отладка намного проще с небольшим пакетом.
  • Используйте `browser_status()` после каждого основного шага. Не предполагайте, что все сессии находятся в одном состоянии.
  • Установите разумные времена ожидания. Слишком короткие и вы получите ложные сбои. Слишком длинные и застрявшие сессии блокируют пакет.
  • Для пакетов более 30, рассмотрите разделение на группы и их последовательный запуск. Это снижает пиковое использование ресурсов.
  • Отслеживайте использование ресурсов вашего антидетект-браузера. Каждый профиль потребляет RAM — 50 экземпляров Chromium могут легко использовать 16+ ГБ.
  • Поддерживайте качество прокси постоянным. Смешанное качество прокси приводит к смешанным временам загрузки страниц, что вызывает проблемы синхронизации.

Распространенные ошибки

  • Предположение, что все сессии видят одну и ту же страницу — они не видят. A/B-тесты, геотаргетинг и обнаружение ботов создают расхождения. Всегда проверяйте с помощью `browser_status()` или группового анализа.
  • Отсутствие логики восстановления — если вы не обрабатываете сбои, одна застрявшая сессия может заблокировать весь пакет. Встройте повторы и логику пропуска.
  • Игнорирование ограничений ресурсов — 50 браузеров + визуальный анализ + решение CAPTCHA могут перегрузить машину. Используйте ограниченный параллелизм.
  • Последовательное мышление в параллельной системе — не проходите по сессиям одну за другой. Используйте инструменты `browser_parallel_*` для действия на всех сессиях одновременно.
  • Отсутствие проверки результатов — успешная отправка формы не означает, что учетная запись была создана. Всегда проверяйте финальное состояние.

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