Доля решений упала с 95% до 60% за одну ночь? Причина обычно находится за 15–20 минут по шести проверкам: код, sitekey, прокси, токен, ошибки, базовый уровень.
Дерево диагностики: откуда начать поиск причины
Solve rate dropped
├── Is the API returning errors? → Check error codes
│ ├── ERROR_WRONG_USER_KEY → API key issue
│ ├── ERROR_ZERO_BALANCE → Balance depleted
│ ├── ERROR_NO_SLOT_AVAILABLE → Rate limiting
│ └── ERROR_CAPTCHA_UNSOLVABLE → CAPTCHA changed
├── Are tokens returned but rejected by the target site?
│ ├── Token expired before submission → Speed up injection
│ ├── Sitekey changed → Re-extract from page
│ └── Domain mismatch → Check pageurl parameter
├── Are proxies failing?
│ ├── Proxy banned by target → Rotate proxies
│ └── Proxy timeout → Check proxy health
└── Did the target site change?
├── New CAPTCHA type → Update method parameter
├── JavaScript changes → Re-analyze page
└── Rate limiting by site → Reduce frequency
Если сценарий уже узнаваем — загляните в шпаргалку ниже и сразу переходите к действию. Если нет — пройдите шесть шагов по порядку.
Шпаргалка: сценарий → причина → действие
| Сценарий | Вероятная причина | Первое действие |
|---|---|---|
100% отказов, всегда ERROR_WRONG_USER_KEY |
Неверный API-ключ | Перепроверьте API-ключ |
| Постепенное снижение день за днём | Деградация прокси | Ротируйте прокси |
| Резкий обвал до 0% | Изменился sitekey или страница | Заново извлеките параметры CAPTCHA |
| Решается, но токены отклоняются сайтом | Токен просрочен или домен не совпадает | Проверьте тайминг и параметр pageurl |
| Работает на тестовом сайте, не работает на целевом | Ограничения конкретного сайта | Сравните параметры между сайтами |
Шаг 1. Прогоните диагностический скрипт CaptchaAI
Начните с автоматической проверки — она сразу разделяет проблемы API, сайта и прокси:
# diagnose_solve_rate.py
import os
import requests
from collections import Counter
API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")
def check_balance():
"""Verify API key and balance."""
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "getbalance", "json": "1",
})
result = resp.json()
print(f"Balance: {result}")
return result
def test_solve(sitekey, pageurl, runs=5):
"""Run test solves and collect error statistics."""
errors = Counter()
successes = 0
for i in range(runs):
# Submit
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": "1",
})
result = resp.json()
if result.get("status") != 1:
errors[result.get("request", "UNKNOWN")] += 1
print(f" Run {i+1}: Submit error: {result.get('request')}")
continue
task_id = result["request"]
import time
time.sleep(15)
# Poll
for _ in range(25):
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:
successes += 1
print(f" Run {i+1}: Solved")
break
if poll_result.get("request") != "CAPCHA_NOT_READY":
errors[poll_result.get("request", "UNKNOWN")] += 1
print(f" Run {i+1}: Error: {poll_result.get('request')}")
break
time.sleep(5)
else:
errors["TIMEOUT"] += 1
print(f" Run {i+1}: Timeout")
print(f"\nResults: {successes}/{runs} solved")
if errors:
print(f"Errors: {dict(errors)}")
# Run diagnostics
print("=== Balance Check ===")
check_balance()
print("\n=== Test Solves ===")
test_solve("YOUR_SITEKEY", "https://your-staging.example.com", runs=5)
Шаг 2. Сверьте sitekey и тип CAPTCHA на целевой странице
Обычно причина — изменившийся sitekey или структура страницы. Откройте страницу, включите DevTools (F12) и сверьте с кодом:
- reCAPTCHA: атрибут
data-sitekeyили вызовgrecaptcha.render— один изменившийся символ даёт 100% отказ - Cloudflare Turnstile:
data-sitekeyв виджете Turnstile - GeeTest: параметр
gtпри инициализации - Тип провайдера — сайты мигрируют reCAPTCHA v2 → v3 (invisible), reCAPTCHA → Turnstile, изображение → reCAPTCHA Enterprise; при смене обновите
methodв запросе
Пример из практики: у QA-команды в Алматы доля решений reCAPTCHA v2 упала с 96% до 55% за ночь — сайт перешёл на Turnstile, а в коде остался метод
userrecaptcha. Замена метода вернула прежний уровень за час.
Шаг 3. Проверьте здоровье прокси-пула
Качество прокси напрямую влияет на долю решений — особенно для токен-based CAPTCHA, где CaptchaAI работает через ваш прокси. Сначала протестируйте без прокси (если тип CAPTCHA это допускает), чтобы сразу понять, в прокси ли дело:
- Прокси заблокирован целевым сайтом (токен решён, но отклонён) → переключитесь на другой авторизованный сетевой выход
- Прокси возвращает
ERROR_PROXY_NOT_FOUND→ проверьте, что прокси жив и доступен - Обнаружен дата-центровый прокси (доля решений ниже обычной) → перейдите на резидентный прокси
- Гео прокси не совпадает с целью (результаты нестабильны) → подберите страну прокси под целевой сайт
Шаг 4. Не истекает ли токен до отправки формы
У токена CAPTCHA ограниченный срок жизни:
| Тип CAPTCHA | Срок жизни токена |
|---|---|
| reCAPTCHA v2 | ~120 секунд |
| reCAPTCHA v3 | ~120 секунд |
| Cloudflare Turnstile | ~300 секунд |
| GeeTest v3 | ~60 секунд |
Если между получением токена и отправкой формы проходит слишком много времени, сайт отклонит токен. Замерьте время между
getTaskResultи отправкой формы; если больше 60 секунд — оптимизируйте конвейер.
Шаг 5. Разберите ошибки по частоте
Отсортируйте ошибки по частоте:
| Ошибка | Значение | Действие |
|---|---|---|
ERROR_CAPTCHA_UNSOLVABLE |
CAPTCHA слишком сложна или изменилась | Сообщите CaptchaAI; проверьте, верен ли sitekey |
ERROR_WRONG_CAPTCHA_ID |
Опрашивается не тот ID задачи | Исправьте отслеживание ID задачи в коде |
ERROR_ZERO_BALANCE |
Закончились кредиты | Пополните баланс |
ERROR_NO_SLOT_AVAILABLE |
Сработало ограничение частоты | Снизьте параллелизм или добавьте задержку |
CAPCHA_NOT_READY (таймаут) |
Решение занимает слишком много времени | Увеличьте таймаут опроса; проверьте sitekey |
Шаг 6. Сравните текущие метрики с базовым уровнем
Сравните текущие показатели с прежним базовым уровнем, если он у вас есть:
| Метрика | Базовый уровень | Текущий | Дельта | Стоит беспокоиться? |
|---|---|---|---|---|
| Доля решений | 95% | ? | Падение > 5% — разбираться | |
| Медианное время решения | 15 с | ? | Рост > 50% — разбираться | |
| Доля ошибок | 2% | ? | > 5% — разбираться | |
| Доля принятых токенов | 98% | ? | Падение > 3% — сайт изменился |
Когда писать в поддержку CaptchaAI
Обращайтесь в поддержку, если:
- Все шаги диагностики пройдены, а доля решений всё равно низкая
- Доля
ERROR_CAPTCHA_UNSOLVABLEпревышает 20% на sitekey, которые раньше работали - Баланс в порядке, но решения не проходят
- Проблема держится дольше 2 часов
В заявку включите: тип CAPTCHA и sitekey, URL целевого сайта, распределение ошибок из скрипта, когда началась проблема и какие изменения вы вносили в код.
Частые вопросы
Сколько тестовых прогонов нужно, чтобы доверять диагностике?
Обычно хватает 5 прогонов; при нестабильных результатах увеличьте выборку до 15–20.
Нормально ли, что часть запросов возвращает ERROR_CAPTCHA_UNSOLVABLE?
Да, 2–5% для сложных CAPTCHA — норма. Разбираться стоит, только если доля стабильно выше 15–20%.
ERROR_NO_SLOT_AVAILABLE стала появляться регулярно — нужно ли менять тариф?
Разовая ошибка — всплеск нагрузки сверх лимита потоков. При постоянных повторах сравните нагрузку с тарифом, например BASIC ($15/мес, 5 потоков), и перейдите на план побольше.