Reference

Сравнительный анализ времени решения CAPTCHA для разных типов с помощью CaptchaAI

Решайте вопросы времени. Разница в 10 секунд на решение приводит к часам задержки при выполнении тысяч задач. В этом руководстве представлены воспроизводимые тесты для каждого типа CAPTCHA.CaptchaAIподдержки, а также сценарии для проведения собственных измерений.

Типичное время решения

Эти тесты отражают среднее время выполнения 100 последовательных решений каждого типа, измеренное от отправки API до получения результатов:

Тип капчи Медианное решение P90 Решить P99 Решить Уровень успеха
reCAPTCHA v2 12–18 с. 25 секунд 40-е годы ориентировочное значение
reCAPTCHA v2 Невидимый 10–15 с. 20 с 35 с ориентировочное значение
reCAPTCHA v3 8–12 с. 18 с 30 с 90%+
reCAPTCHA Предприятие 15–25 с. 35 с 50-е годы 90%+
Cloudflare Turnstile 5–10 с 15 секунд 25 секунд 99%+
GeeTest v3 10–18 с. 25 секунд 40-е годы 90%+
Изображение/OCR 3–8 с 12 секунд 20 с 85%+
BLS CAPTCHA 5–10 с 15 секунд 20 с 100%

Время зависит от качества прокси, загрузки сервера и сложности CAPTCHA.

Факторы, влияющие на время решения

Задержка сети

Расстояние от конечных точек API CaptchaAI увеличивает время прохождения туда и обратно. RTT в 200 мс добавляет примерно 1 секунду (отправка + 3–4 опроса × 200 мс).

Качество прокси

При использовании прокси-серверов домашние прокси-серверы обычно обеспечивают более быстрое решение, чем прокси-серверы центров обработки данных, поскольку они вызывают меньше вторичных проблем.

Сложность капчи

Задачи с изображениями reCAPTCHA v2 различаются по сложности. Задача «выбрать светофор» с выцветающими изображениями занимает больше времени, чем простая проверка флажка.

Стратегия опроса

Агрессивный опрос (каждые 2 секунды) быстрее обнаруживает результаты, но увеличивает количество вызовов API. Консервативный опрос (каждые 10 секунд) снижает нагрузку, но увеличивает задержку.

Сценарий тестирования Python

# benchmark_captchaai.py
import os
import time
import statistics
import requests

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")

def benchmark_solve(method, params, runs=10):
    """Benchmark a CAPTCHA type over multiple runs."""
    times = []
    successes = 0

    for i in range(runs):
        start = time.time()

        # Submit
        submit_params = {"key": API_KEY, "json": "1", **params}
        resp = requests.get("https://ocr.captchaai.com/in.php",
                            params=submit_params)
        result = resp.json()

        if result.get("status") != 1:
            print(f"  Run {i+1}: Submit failed - {result.get('request')}")
            continue

        task_id = result["request"]

        # Poll
        time.sleep(10)
        solved = False
        for _ in range(30):
            poll = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": API_KEY, "action": "get",
                "id": task_id, "json": "1",
            })
            poll_result = poll.json()

            if poll_result.get("status") == 1:
                elapsed = time.time() - start
                times.append(elapsed)
                successes += 1
                solved = True
                print(f"  Run {i+1}: {elapsed:.1f}s")
                break
            if poll_result.get("request") != "CAPCHA_NOT_READY":
                print(f"  Run {i+1}: Error - {poll_result.get('request')}")
                break

            time.sleep(5)

        if not solved and poll_result.get("request") == "CAPCHA_NOT_READY":
            print(f"  Run {i+1}: Timeout")

    if times:
        return {
            "runs": runs,
            "successes": successes,
            "success_rate": f"{successes/runs*100:.0f}%",
            "median": f"{statistics.median(times):.1f}s",
            "p90": f"{sorted(times)[int(len(times)*0.9)]:.1f}s" if len(times) >= 10 else "N/A",
            "min": f"{min(times):.1f}s",
            "max": f"{max(times):.1f}s",
        }
    return {"error": "No successful solves"}

# Benchmark reCAPTCHA v2
print("=== reCAPTCHA v2 ===")
recaptcha_v2 = benchmark_solve("userrecaptcha", {
    "method": "userrecaptcha",
    "googlekey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    "pageurl": "https://www.google.com/recaptcha/api2/demo",
})
print(recaptcha_v2)

# Benchmark Image/OCR
print("\n=== Image CAPTCHA ===")
# Submit a base64-encoded test image
import base64
# Use a test image for benchmarking
image_result = benchmark_solve("post", {
    "method": "base64",
    "body": "BASE64_ENCODED_CAPTCHA_IMAGE",
})
print(image_result)

Сценарий тестирования JavaScript

// benchmark_captchaai.js
const axios = require('axios');

const API_KEY = process.env.CAPTCHAAI_KEY || 'YOUR_API_KEY';

async function benchmarkSolve(params, runs = 10) {
  const times = [];
  let successes = 0;

  for (let i = 0; i < runs; i++) {
    const start = Date.now();

    // Submit
    const submit = await axios.get('https://ocr.captchaai.com/in.php', {
      params: { key: API_KEY, json: '1', ...params },
    });

    if (submit.data.status !== 1) {
      console.log(`  Run ${i + 1}: Submit failed - ${submit.data.request}`);
      continue;
    }

    // Poll
    await new Promise(r => setTimeout(r, 10000));
    let solved = false;

    for (let j = 0; j < 30; j++) {
      const poll = await axios.get('https://ocr.captchaai.com/res.php', {
        params: { key: API_KEY, action: 'get', id: submit.data.request, json: '1' },
      });

      if (poll.data.status === 1) {
        const elapsed = (Date.now() - start) / 1000;
        times.push(elapsed);
        successes++;
        solved = true;
        console.log(`  Run ${i + 1}: ${elapsed.toFixed(1)}s`);
        break;
      }
      if (poll.data.request !== 'CAPCHA_NOT_READY') {
        console.log(`  Run ${i + 1}: Error - ${poll.data.request}`);
        break;
      }
      await new Promise(r => setTimeout(r, 5000));
    }

    if (!solved) console.log(`  Run ${i + 1}: Timeout`);
  }

  if (times.length === 0) return { error: 'No successful solves' };

  times.sort((a, b) => a - b);
  return {
    runs, successes,
    successRate: `${((successes / runs) * 100).toFixed(0)}%`,
    median: `${times[Math.floor(times.length / 2)].toFixed(1)}s`,
    min: `${times[0].toFixed(1)}s`,
    max: `${times[times.length - 1].toFixed(1)}s`,
  };
}

(async () => {
  console.log('=== reCAPTCHA v2 ===');
  const v2 = await benchmarkSolve({
    method: 'userrecaptcha',
    googlekey: '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
    pageurl: 'https://www.google.com/recaptcha/api2/demo',
  });
  console.log(v2);

  console.log('\n=== Cloudflare Turnstile ===');
  const turnstile = await benchmarkSolve({
    method: 'turnstile',
    sitekey: 'YOUR_TURNSTILE_SITEKEY',
    pageurl: 'https://example.com',
  });
  console.log(turnstile);
})();

Интерпретация результатов

Медиана против P90

  • Медиана – типичный опыт. Используйте это для планирования мощности.
  • P90 — «Худший случай» решается в 9 случаях из 10. Используйте это для настроек тайм-аута.
  • P99 — Крайний случай. Установите максимальный тайм-аут выше этого значения.

Оптимальные интервалы опроса

На основе приведенных выше тестов настройте опрос для каждого типа CAPTCHA:

Тип капчи Начальное ожидание Интервал опроса Максимальное количество попыток
Изображение/OCR 5 с 3 с 15
Cloudflare Turnstile 5 с 3 с 15
BLS CAPTCHA 5 с 3 с 15
reCAPTCHA v2 15 секунд 5 с 20
reCAPTCHA v3 10 с 5 с 20
GeeTest v3 12 секунд 5 с 20
reCAPTCHA Предприятие 15 секунд 5 с 25

Поиск неисправностей

| Проблема | Причина | Исправить |


Следующие шаги

  • CaptchaAI Quickstart: ваше первое решение CAPTCHA за 5 минут
  • Как решить reCAPTCHA v2 через API: пошаговое руководство
  • Как решить Cloudflare Turnstile через API
  • Как решить GeeTest v3 с помощью API
Комментарии для этой статьи отключены.

Похожие сообщения

Comparisons Как измерять время ответа CAPTCHA solver в 2025 году
Методика измерения времени решения CAPTCHA в собственной среде: медиана, P 90, P 99, внутренние выборки и корректное сравнение провайдеров.

Методика измерения времени решения CAPTCHA в собственной среде: медиана, P 90, P 99, внутренние выборки и корр...

May 07, 2026
DevOps & Scaling Рабочие решения CAPTCHA с автоматическим масштабированием
Руководство Dev Ops по рабочим решениям CAPTCHA с автоматическим масштабированием, с архитектурными решениями, эксплуатационными соображениями и шаблонами автом...

Руководство Dev Ops по рабочим решениям CAPTCHA с автоматическим масштабированием, с архитектурными решениями,...

Apr 23, 2026
Troubleshooting Падение скорости решения CAPTCHA: диагностика регресса производительности
Практическое руководство по Падение скорости решения CAPTCHA: диагностика регресса производительности с общими причинами, шагами диагностики и конкретными испра...

Практическое руководство по Падение скорости решения CAPTCHA: диагностика регресса производительности с общими...

May 07, 2026