Comparisons

Por que os desenvolvedores mudam do Anti-Captcha para o CaptchaAI

A troca quase nunca começa pelo preço. Começa no dia em que o site monitorado deixa de exibir um widget Turnstile e passa a entregar uma página de desafio da Cloudflare — e o wrapper do Anti-Captcha volta com o mesmo erro em toda retentativa.

Em cobertura, a diferença é objetiva: o Anti-Captcha cobre o token do widget, mas para a página de desafio inteira, o BLS dos portais de agendamento e o v3 com score baixo não há método.

Vale sair do Anti-Captcha? O resumo antes do código

  • Vale, se o coletor autorizado bate na página de desafio da Cloudflare, não só no widget.
  • Vale, se você automatiza portais de agendamento com BLS CAPTCHA.
  • Vale, se o score do reCAPTCHA v3 chega baixo e o formulário cai em verificação extra.
  • Pode esperar, se o volume é baixo e só aparece reCAPTCHA v2.

Comparativo de recursos lado a lado

As marcações vêm da documentação pública dos dois provedores e de relatos de usuários, conferidos em setembro de 2026; resultados variam conforme o ambiente.

Recurso Anti-Captcha CaptchaAI
reCAPTCHA v2, Invisible e Enterprise
reCAPTCHA v3 ✅ (score baixo em relatos)
Cloudflare Turnstile
Challenge da Cloudflare e desafio JS
GeeTest v3
BLS
Imagem/OCR ✅ 27.500+ variantes

CaptchaFox, Friendly Captcha e Lemin estão em beta. hCaptcha, FunCaptcha (Arkose Labs) e GeeTest v4 não são tipos suportados.

Onde o Anti-Captcha trava a operação

Cloudflare: o widget passa, a página de desafio não

O Anti-Captcha entrega tokens de Turnstile, mas não trata a página de desafio completa nem o desafio JS — e boa parte dos alvos de coleta autorizada hoje responde com essa página antes de qualquer HTML útil.

Formato da API: JSON próprio contra o padrão de mercado

O Anti-Captcha usa uma API própria de tarefas JSON. A CaptchaAI usa o formato compatível com 2Captcha, adotado por dezenas de bibliotecas:

# Anti-Captcha — custom JSON format
import requests

resp = requests.post("https://api.anti-captcha.com/createTask", json={
    "clientKey": "ANTICAPTCHA_KEY",
    "task": {
        "type": "RecaptchaV2TaskProxyless",
        "websiteURL": "https://example.com",
        "websiteKey": "SITE_KEY",
    }
})
task_id = resp.json()["taskId"]

# Poll with different endpoint and format
result = requests.post("https://api.anti-captcha.com/getTaskResult", json={
    "clientKey": "ANTICAPTCHA_KEY",
    "taskId": task_id,
})
# CaptchaAI — standard 2Captcha-compatible format
import requests

resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com",
    "json": 1,
})
task_id = resp.json()["request"]

# Standard polling
result = requests.get("https://ocr.captchaai.com/res.php", params={
    "key": "YOUR_API_KEY",
    "action": "get",
    "id": task_id,
    "json": 1,
})

Quem já tem um wrapper compatível com 2Captcha troca a URL base e a chave de API; quem escreveu o cliente direto contra createTask reescreve envio e consulta.

BLS CAPTCHA em portais de agendamento

Automação de portais governamentais e de agendamento de visto depende do BLS CAPTCHA:

# CaptchaAI — BLS with a high success rate
resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": "YOUR_API_KEY",
    "method": "bls",
    "pageurl": "https://bls-portal.example.com",
    "sitekey": "BLS_SITE_KEY",
    "json": 1,
})

O Anti-Captcha não tem método BLS: ou o provedor cobre o tipo, ou o portal fica fora.

reCAPTCHA v3 e GeeTest: qualidade do resultado

Um token de v3 aceito com score baixo é quase tão ruim quanto um recusado: o envio passa, mas o backend manda o usuário para verificação extra. A abordagem assistida por humanos do Anti-Captcha produz scores variáveis, relatados entre 0,3 e 0,5; a CaptchaAI resolve o v3 por motor de IA em menos de 4 s.

Versão do GeeTest Anti-Captcha CaptchaAI
GeeTest v3 85–90% em relatos ✅ menos de 12 s
GeeTest v4 80–85% em relatos ❌ em breve

A CaptchaAI ainda não resolve GeeTest v4: o suporte está anunciado como em breve.

Velocidade por tipo de CAPTCHA

A coluna CaptchaAI traz tetos publicados por tipo, não médias; a do Anti-Captcha, faixas de relatos públicos.

Tipo de CAPTCHA Anti-Captcha CaptchaAI
reCAPTCHA v2 15–45 s <60 s
reCAPTCHA v3 10–30 s <4 s
Cloudflare Turnstile 10–30 s <10 s
GeeTest v3 15–40 s <12 s

Para workers em São Paulo (sa-east-1), o RTT cabe dentro dessas faixas — meça ponta a ponta na sua região antes de dimensionar o plano.

Custo: threads em vez de pagamento por resolução

A CaptchaAI cobra por thread simultânea, com resoluções ilimitadas no plano: BASIC (US$ 15/mês, 5 threads), STANDARD (US$ 30/mês, 15 threads), ADVANCE (US$ 90/mês, 50 threads) até VIP-3 (US$ 7.500/mês, 5.000 threads). O que dimensiona o plano é a concorrência, e não o volume.

Caminho de migração sem parar a operação

A migração mexe no envio da tarefa e na consulta do resultado. O menor risco é um wrapper único que fala com os dois provedores na transição:

import requests
import time


class CaptchaSolver:
    """Unified solver — supports Anti-Captcha and CaptchaAI."""

    def __init__(self, provider="captchaai", api_key="YOUR_API_KEY"):
        self.provider = provider
        self.api_key = api_key

    def solve_recaptcha_v2(self, sitekey, pageurl):
        if self.provider == "captchaai":
            return self._solve_captchaai("userrecaptcha", sitekey, pageurl)
        else:
            return self._solve_anticaptcha(sitekey, pageurl)

    def _solve_captchaai(self, method, sitekey, pageurl):
        resp = requests.post("https://ocr.captchaai.com/in.php", data={
            "key": self.api_key,
            "method": method,
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": 1,
        })
        task_id = resp.json()["request"]

        for _ in range(60):
            time.sleep(5)
            result = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": self.api_key, "action": "get",
                "id": task_id, "json": 1,
            })
            data = result.json()
            if data["request"] != "CAPCHA_NOT_READY":
                return data["request"]

        raise TimeoutError("Solve timeout")

    def _solve_anticaptcha(self, sitekey, pageurl):
        resp = requests.post("https://api.anti-captcha.com/createTask", json={
            "clientKey": self.api_key,
            "task": {
                "type": "RecaptchaV2TaskProxyless",
                "websiteURL": pageurl,
                "websiteKey": sitekey,
            },
        })
        task_id = resp.json()["taskId"]

        for _ in range(60):
            time.sleep(5)
            result = requests.post(
                "https://api.anti-captcha.com/getTaskResult",
                json={"clientKey": self.api_key, "taskId": task_id},
            )
            data = result.json()
            if data["status"] == "ready":
                return data["solution"]["gRecaptchaResponse"]

        raise TimeoutError("Solve timeout")

Com provider="captchaai" nos serviços novos e o Anti-Captcha ligado nos antigos, dá para rodar os dois em paralelo e comparar resultados no tráfego real. Faça isso em QA autorizado, com URLs de staging (https://staging.example.com/...) e dados fictícios; havendo dados pessoais, avalie as obrigações da LGPD sobre o log.

Problemas comuns na troca

Os chamados da primeira semana costumam ser estes três:

Sintoma Causa Correção
Requisição recusada no envio Corpo ainda em tarefa JSON POST em form-data para in.php
Campo method ausente O Anti-Captcha declara type Troque por method=userrecaptcha
Consulta sem retorno O endpoint de resultado é outro GET em /res.php com action=get

Perguntas frequentes

Dá para manter os dois provedores ligados durante a migração?

Sim, e é o recomendado. Direcione uma fatia do tráfego para cada back-end do wrapper acima e compare os resultados antes de desligar o antigo.

Quanto tempo leva a mudança de código?

Com uma biblioteca compatível com 2Captcha, é troca de chave de API e de URL base. Com um cliente escrito direto contra a API de tarefas, conte algumas horas.

O custo sobe se eu aumentar o volume no mesmo plano?

Não há cobrança por resolução: o plano define quantas threads simultâneas você tem. Se a fila cresce, faltam threads, não créditos.

hCaptcha e FunCaptcha entram nessa comparação?

Não. Nenhum dos dois está entre os tipos suportados pela CaptchaAI.

Guias relacionados


Compare antes de decidir: teste a CaptchaAI e meça resolução e cobertura de Cloudflare no seu ambiente.

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