Сравнения

WebDriver и CDP в QA CAPTCHA: когда что использовать в собственных средах

Безопасный scope: Это руководство применимо только к собственным или явно авторизованным QA-, staging- и production-средам. Описаны сценарии диагностики, тестирования и наблюдаемости вашей собственной CAPTCHA-интеграции — не для сторонних сайтов и не для несанкционированных workflow.

WebDriver и Chrome DevTools Protocol решают разные задачи. WebDriver — стандартный протокол управления браузером для функциональных тестов. CDP — низкоуровневый протокол DevTools для диагностики сети, перехвата запросов и точечной проверки рендера. В QA CAPTCHA оба полезны.

Когда выбирать WebDriver

  • стандартные сценарии в Selenium / WebDriverIO;
  • кросс-браузерные QA-сюиты;
  • интеграция с готовыми тест-фреймворками;
  • запуск на удалённых grid-нодах.

Когда выбирать CDP

  • диагностика, какие запросы CAPTCHA отправляет ваш собственный виджет в staging;
  • замер времени загрузки виджета;
  • инспекция сетевых ошибок;
  • тонкая проверка консольных сообщений виджета.

Сравнение по QA-задачам

Задача WebDriver CDP
Заполнение формы да через Runtime.evaluate
Ожидание появления виджета да да
Перехват сетевого запроса ограниченно прямо
Логирование консоли через capabilities прямо
Метрики Performance косвенно прямо

Пример WebDriver сценария

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('https://staging.example.com/qa-form')
sitekey = driver.find_element(By.CSS_SELECTOR, '.g-recaptcha').get_attribute('data-sitekey')
token = solve(sitekey)
driver.execute_script(
    "document.getElementById('g-recaptcha-response').value = arguments[0];",
    token,
)
driver.find_element(By.CSS_SELECTOR, 'button[type=submit]').click()

Пример CDP диагностики

import json, websockets, asyncio

async def trace(ws_url):
    async with websockets.connect(ws_url) as ws:
        await ws.send(json.dumps({'id': 1, 'method': 'Network.enable'}))
        async for msg in ws:
            data = json.loads(msg)
            if data.get('method') == 'Network.requestWillBeSent':
                print(data['params']['request']['url'])

Логи и наблюдаемость

Структурированные логи помогают сравнивать поведение CAPTCHA между релизами и быстро находить регрессии в собственных формах:

import json, time, logging

log = logging.getLogger('captcha-qa')

def record(event: str, **fields) -> None:
    payload = {'ts': time.time(), 'event': event, **fields}
    log.info(json.dumps(payload, ensure_ascii=False))

Минимальный набор полей для каждой попытки: slug, captcha_type, task_id, wait_seconds, verify_status, env. Этого достаточно, чтобы построить дашборд медианы / P90 / P99 по типу CAPTCHA и по среде.

Troubleshooting

Симптом Что сделать
WebDriver не видит элемент Дождитесь explicit wait
CDP-сессия рвётся Проверьте --remote-debugging-port
Токен не подставляется Проверьте id поля и JS-инициализацию
Нет логов консоли Включите соответствующий domain в CDP

QA-чек-лист

  • Запрос отправляется только на собственные или авторизованные endpoints.
  • Тестовые учётные записи, события и платежи помечены как фиктивные.
  • CAPTCHA-токен проверяется на собственном backend, а не доверяется клиенту.
  • Логи содержат task_id, тип CAPTCHA, время ожидания и pass/fail.
  • Скрипт возвращает корректный exit code, чтобы CI мог принять решение.

FAQ

Можно ли использовать этот подход на сторонних сайтах?

Нет. Описанные сценарии применимы только к собственным или явно авторизованным средам. Для чужих ресурсов запрашивайте письменное разрешение владельца.

Что делать, если CaptchaAI вернул ошибку?

Логируйте task_id, тип CAPTCHA и текст ошибки, повторите запрос с экспоненциальной задержкой и фиксируйте долю ошибок в дашборде. Постоянный рост ошибок — повод проверить sitekey и страницу.

Как сравнивать результаты между релизами?

Сохраняйте логи в одном формате и стройте отчёт по медиане, P90 и P99 на одинаковом наборе сценариев. Сравнивайте только сопоставимые выборки в собственной среде.

Безопасные связанные руководства

  • Быстрый старт CaptchaAI
  • QA-тестирование CAPTCHA в авторизованных средах
  • Тестирование CAPTCHA API на собственных формах
  • Отладка: браузерный тест падает, API проходит
  • reCAPTCHA v2 через API
  • Cloudflare Turnstile через API
  • GeeTest v3 через API

Готовы расширить QA-сюиту? Подключите CaptchaAI.

Комментарии для этой статьи отключены.