Когда ваш уровень решаемости падает, не думайте — следуйте этой систематической диагностике, чтобы найти и устранить основную причину.
Блок-схема диагностики
Success rate dropped
│
├── Are tokens being generated?
│ ├── NO → Check API errors
│ │ ├── ERROR_WRONG_GOOGLEKEY → Sitekey changed. Re-extract.
│ │ ├── ERROR_BAD_PARAMETERS → Check required params
│ │ ├── ERROR_NO_SLOT → Retry with backoff
│ │ └── Other errors → See error decision tree
│ │
│ └── YES → Tokens generated but rejected by target site
│ │
│ ├── Token expired before use?
│ │ └── YES → Submit token faster (< 60-120s)
│ │
│ ├── Token used for wrong domain?
│ │ └── YES → Check pageurl matches submission domain
│ │
│ ├── reCAPTCHA v3 score too low?
│ │ └── YES → Check action parameter, try min_score
│ │
│ ├── Site changed CAPTCHA type?
│ │ └── YES → Re-detect CAPTCHA type
│ │
│ └── Site added additional checks?
│ └── YES → Check for сигналы браузераing, cookies, headers
Шаг 1. Измерьте свой текущий курс
import requests
import time
from collections import defaultdict
class SuccessTracker:
"""Track solve success rates over time."""
def __init__(self):
self.stats = defaultdict(lambda: {"attempts": 0, "success": 0, "errors": defaultdict(int)})
def record(self, method, success, error_code=None):
self.stats[method]["attempts"] += 1
if success:
self.stats[method]["success"] += 1
elif error_code:
self.stats[method]["errors"][error_code] += 1
def report(self):
for method, data in self.stats.items():
rate = data["success"] / data["attempts"] * 100 if data["attempts"] > 0 else 0
print(f"\n{method}:")
print(f" Attempts: {data['attempts']}")
print(f" Success: {data['success']} ({rate:.1f}%)")
if data["errors"]:
print(" Errors:")
for err, count in sorted(data["errors"].items(), key=lambda x: -x[1]):
print(f" {err}: {count}")
tracker = SuccessTracker()
Шаг 2. Определите категорию проблемы
Категория A: Сбои на уровне API
API CaptchaAI возвращает ошибку вместо токена.
def diagnose_api_failures(api_key, method, params, attempts=10):
"""Run test solves and collect error patterns."""
errors = defaultdict(int)
successes = 0
for i in range(attempts):
try:
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": api_key, "method": method, "json": 1, **params,
}, timeout=30)
result = resp.json()
if result.get("status") != 1:
errors[result.get("request", "UNKNOWN")] += 1
continue
task_id = result["request"]
# Quick poll
time.sleep(15)
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key, "action": "get",
"id": task_id, "json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
successes += 1
else:
errors[data.get("request", "POLL_ERROR")] += 1
except Exception as e:
errors[f"EXCEPTION:{type(e).__name__}"] += 1
time.sleep(2)
print(f"\nResults: {successes}/{attempts} success")
for err, count in sorted(errors.items(), key=lambda x: -x[1]):
print(f" {err}: {count}")
Категория B: Отклонение токена
CaptchaAI возвращает действительный токен, но целевой сайт его отклоняет.
Распространенные причины:
| Причина | Проверять |
|---|---|
| Срок действия токена истек | Использование токена > 120 секунд после генерации |
| Несоответствие домена | pageurl не соответствует домену отправки |
| оценка v3 слишком низкая | Сайт требует 0,7+, но решатель получает 0,3 |
| Отсутствует действие | v3 требует соответствующего параметра действия |
| Параметры сайта изменены | Ключ сайта или структура страницы изменены. |
Шаг 3. Устраните распространенные проблемы
Исправлено: срок действия токена.
def solve_and_use_immediately(api_key, sitekey, pageurl):
"""Solve and use token as fast as possible."""
# Submit
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": api_key,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": 1,
}, timeout=30)
task_id = resp.json()["request"]
# Poll aggressively
for _ in range(24):
time.sleep(5)
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key, "action": "get",
"id": task_id, "json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
token = data["request"]
# USE IMMEDIATELY — don't store for later
submit_form(token)
return True
return False
Исправлено: устаревший ключ сайта.
def solve_with_fresh_params(api_key, pageurl):
"""Re-extract sitekey before each solve."""
import re
resp = requests.get(pageurl, timeout=15)
match = re.search(r'data-sitekey="([^"]+)"', resp.text)
if not match:
raise RuntimeError("Could not find sitekey")
sitekey = match.group(1)
# Now solve with fresh sitekey
# ...
Исправлено: параметр действия v3.
# Check what action the site uses
# Look for: grecaptcha.execute('sitekey', {action: 'submit'})
data = {
"key": api_key,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"version": "v3",
"action": "submit", # Must match site's action
"min_score": "0.7",
"json": 1,
}
Ожидаемые показатели успеха
| Тип капчи | Нормальная ставка | Порог оповещения |
|---|---|---|
| reCAPTCHA v2 | 95-99% | Ниже 90% |
| reCAPTCHA v3 | 90-98% | Ниже 85% |
| Cloudflare Turnstile | 99-100% | Ниже 95% |
| GeeTest v3 | 99-100% | Ниже 95% |
| БЛС | 99-100% | Ниже 95% |
| Изображение/OCR | 90-98% | Ниже 85% |
Поиск неисправностей
| Проблема | Причина | Исправить |
|---|---|---|
| Ставка снизилась с 98% до 70% | Sitekey или страница изменены | Повторно извлечь все параметры |
| все токены v3 отклонены | Неправильный параметр действия | Сопоставить действие из источника страницы |
| Токены работают, но срок их действия истекает | Слишком медленно для использования | Отправьте токен в течение 60 секунд |
| Стоимость варьируется в зависимости от времени суток | Ограничение скорости на стороне сервера | Добавьте задержки между подачами |
Часто задаваемые вопросы
Каков нормальный показатель успеха?
ориентировочное значение для большинства типов CAPTCHA. Если ваш показатель постоянно ниже 90 %, скорее всего, возникла проблема с параметром или временем.
Как быстро мне нужно использовать токены?
Срок действия токенов reCAPTCHA истекает через 120 секунд. токены Cloudflare Turnstile за 300 секунд. Используйте токены в течение 60 секунд для достижения наилучших результатов.
Должен ли я сообщать о неправильных решениях?
Да. Используйте конечную точку reportbad, чтобы сообщать о неверных решениях. CaptchaAI использует эту обратную связь для повышения точности.
Связанные руководства
- Дерево решений обработки ошибок
- Панель управления и мониторинг использования
Диагностируйте быстрее, решайте подходящий —используйте CaptchaAI.