Интеграции

Puppeteer + CaptchaAI для QA-тестов в собственных браузерных workflow

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

Puppeteer удобно использовать в QA для воспроизводимой браузерной проверки собственных форм. CaptchaAI решает CAPTCHA в шагах, где иначе тест останавливается на интерактивном виджете. Все примеры ниже работают только с собственными staging-страницами.

Безопасный scope

  • собственные или авторизованные staging-домены;
  • фиктивные пользователи и формы;
  • внутренние QA endpoints для проверки токена;
  • логирование результата тестов в собственный pipeline.

Настройка Puppeteer для QA

import puppeteer from 'puppeteer';

const PAGE = 'https://staging.example.com/qa-form';

export async function runQa() {
  const browser = await puppeteer.launch({
    headless: 'new',
    userDataDir: './qa-profiles/qa-form',
  });
  const page = await browser.newPage();
  await page.goto(PAGE, { waitUntil: 'networkidle0' });
  return { browser, page };
}

Обнаружение CAPTCHA widget на собственной staging-странице

const sitekey = await page.$eval(
  '.g-recaptcha, .cf-turnstile',
  el => el.getAttribute('data-sitekey'),
);
if (!sitekey) throw new Error('sitekey не найден на staging-странице');

Отправка задачи в CaptchaAI

import fetch from 'node-fetch';

const KEY = process.env.CAPTCHAAI_KEY;

export async function solveRecaptcha(sitekey, pageUrl) {
  const submit = await fetch('https://ocr.captchaai.com/in.php', {
    method: 'POST',
    body: new URLSearchParams({
      key: KEY, method: 'userrecaptcha',
      googlekey: sitekey, pageurl: pageUrl, json: '1',
    }),
  }).then(r => r.json());
  const id = submit.request;
  for (let i = 0; i < 40; i++) {
    await new Promise(r => setTimeout(r, 3000));
    const res = await fetch(`https://ocr.captchaai.com/res.php?key=${KEY}&action=get&id=${id}&json=1`)
      .then(r => r.json());
    if (res.status === 1) return res.request;
  }
  throw new Error(`timeout for task ${id}`);
}

Проверка ответа на внутреннем QA endpoint

После получения токена тест отправляет его на собственный QA-endpoint, который вызывает серверную верификацию провайдера и записывает pass/fail в журнал прогона. Решение об успехе теста принимает backend, а не клиентский код.

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

Структурированные логи помогают сравнивать поведение 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

Симптом Что сделать
sitekey не найден Проверьте, рендерится ли виджет в staging
Токен невалиден Сверьте pageurl и sitekey
Бесконечный pending Проверьте баланс ключа CaptchaAI
Браузер не запускается Удалите старый userDataDir

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

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

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