Solução de Problemas

CAPTCHA resolve queda na taxa de sucesso: fluxograma de diagnóstico

Quando sua taxa de resolução cair, não adivinhe – siga este diagnóstico sistemático para encontrar e corrigir a causa raiz.


Fluxograma de Diagnóstico

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 score_qa
│       │
│       ├── Site changed CAPTCHA type?
│       │   └── YES → Re-detect CAPTCHA type
│       │
│       └── Site added additional checks?
│           └── YES → Check for sinal de navegadoring, cookies, headers

Etapa 1: meça sua taxa atual

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()

Etapa 2: Identifique a categoria do problema

Categoria A: falhas no nível da API

A API CaptchaAI retorna um erro em vez de um token.

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}")

Categoria B: Rejeição de Token

CaptchaAI retorna um token válido, mas o site de destino o rejeita.

Causas comuns:

Causa Verifique
Token expirou Usando token > 120s após geração
Incompatibilidade de domínio pageurl não corresponde ao domínio de envio
pontuação v3 muito baixa O site requer 0,7+, mas o solucionador obtém 0,3
Ação ausente v3 requer parâmetro de ação correspondente
Parâmetros alterados no site Sitekey ou estrutura da página alterada

Etapa 3: corrigir problemas comuns

Correção: expiração do token

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

Correção: chave de site obsoleta

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
    # ...

Correção: parâmetro de ação 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
    "score_qa": "0.7",
    "json": 1,
}

Taxas de sucesso esperadas

Tipo CAPTCHA Taxa Normal Limite de alerta
reCAPTCHA v2 95-99% Abaixo de 90%
reCAPTCHA v3 90-98% Abaixo de 85%
Cloudflare Turnstile 99-100% Abaixo de 95%
GeeTest v3 99-100% Abaixo de 95%
BLS 99-100% Abaixo de 95%
Imagem/OCR 90-98% Abaixo de 85%

Solução de problemas

Problema Causa Correção
Taxa caiu de 98% para 70% Sitekey ou página alterada Extraia novamente todos os parâmetros
Tokens v3 todos rejeitados Parâmetro de ação incorreto Corresponder ação da origem da página
Os tokens funcionam, mas expiram Muito lento para usar Envie o token em 60 segundos
A tarifa varia de acordo com a hora do dia Limitação de taxa do lado do servidor Adicione atrasos entre envios

Perguntas frequentes

Qual é uma taxa de sucesso normal?

valor alto em amostra interna para a maioria dos tipos de CAPTCHA. Se você estiver consistentemente abaixo de 90%, provavelmente há um problema de parâmetro ou de tempo.

Com que rapidez preciso usar tokens?

Os tokens reCAPTCHA expiram em 120 segundos. Tokens de catraca em 300 segundos. Use tokens em 60 segundos para obter mais adequado resultados.

Devo relatar soluções incorretas?

Sim. Use o endpoint reportbad para relatar soluções incorretas. CaptchaAI usa esse feedback para aprimorar a precisão.


Guias Relacionados


Diagnostique rápido, resolva mais adequado —usar CaptchaAI.

Os comentários estão desativados para este artigo.