Безопасный 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.