Решайте вопросы времени. Разница в 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