A resolução de Image/text CAPTCHA pode falhar devido à qualidade da imagem, problemas de formato ou parâmetros de dica incorretos. Veja como diagnosticar e corrigir os erros mais comuns.
Erros de envio
ERROR_WRONG_FILE_EXTENSION
Causa: A imagem não está em um formato compatível ou o base64 é inválido.
Correção:
import base64
# Ensure proper encoding
with open("captcha.png", "rb") as f:
b64 = base64.b64encode(f.read()).decode()
# Don't include the data URI prefix
# WRONG: "data:image/png;base64,iVBOR..."
# RIGHT: "iVBOR..."
ERROR_ZERO_CAPTCHA_FILESIZE
Causa: O arquivo de imagem está vazio ou o download falhou.
Correção:
import os
# Check file size before submitting
if os.path.getsize("captcha.png") == 0:
print("Image file is empty — re-download")
# Re-capture the captcha
ERROR_TOO_BIG_CAPTCHA_FILESIZE
Causa: A imagem excede o tamanho máximo (normalmente 600 KB).
Correção:
from PIL import Image
import io
img = Image.open("captcha.png")
# Reduce quality without losing text clarity
buffer = io.BytesIO()
img.save(buffer, format="PNG", optimize=True)
Texto errado retornado
Personagens consistentemente mal interpretados
Causa: O solucionador confunde caracteres semelhantes (0/O, 1/l/I, 5/S).
Correção: Use parâmetros de dica para restringir o conjunto de caracteres:
# If captcha is digits only
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"numeric": 1, # 1 = digits only
"json": 1
})
# If captcha is letters only
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"numeric": 2, # 2 = letters only
"json": 1
})
Caixa errada (maiúsculas versus minúsculas)
Causa: O padrão do solucionador é letras minúsculas.
Correção: Defina regsense=1 para ativar a distinção entre maiúsculas e minúsculas:
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"regsense": 1, # Case-sensitive
"json": 1
})
Caracteres extras ou ausentes
Causa: O ruído é interpretado como caracteres ou os caracteres são mesclados.
Correção: Definir restrições de comprimento min/max:
# If you know the CAPTCHA is always 6 characters
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"min_len": 6,
"max_len": 6,
"json": 1
})
Expressão matemática não calculada
Causa: O solucionador lê o texto "3+7" em vez de calcular a resposta "10".
Correção: Definir calc=1:
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "base64", "body": b64,
"calc": 1, # Compute the math expression
"json": 1
})
Problemas de qualidade de imagem
CAPTCHA muito pequeno
Problema: Imagens muito pequenas (com menos de 50 px de altura) perdem detalhes dos caracteres.
Correção: Capture no maior tamanho disponível. Se a página renderizar o captcha pequeno, verifique se há um URL de origem de resolução mais alta:
# Check for higher-res version
img_src = captcha_el.get_attribute("src")
# Some sites use ?size=small — try removing or changing the parameter
high_res_src = img_src.replace("size=small", "size=large")
CAPTCHA é animado
Problema: alguns CAPTCHAs usam GIFs animados onde o texto só é visível em determinados quadros.
Correção: Extraia o quadro correto:
from PIL import Image
gif = Image.open("captcha.gif")
# Extract each frame and find the one with text
for i in range(gif.n_frames):
gif.seek(i)
gif.save(f"frame_{i}.png")
CAPTCHA tem fundo transparente
Problema: PNG com fundo transparente pode não ser renderizado corretamente para OCR.
Correção: Adicione um fundo branco:
from PIL import Image
img = Image.open("captcha.png").convert("RGBA")
background = Image.new("RGBA", img.size, (255, 255, 255, 255))
background.paste(img, mask=img)
background.convert("RGB").save("captcha_white_bg.png")
Relatando soluções incorretas
Se CaptchaAI retornar o texto errado, informe:
# Report bad answer
requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "reportbad",
"id": task_id
})
Isso aprimora a precisão do solucionador e pode reembolsar o custo da solução.
Lista de verificação de aprimoramento de precisão
| Parâmetro | Quando usar | Efeito |
|---|---|---|
numeric=1 |
Apenas dígitos | Elimina a confusão da letra/digit |
numeric=2 |
Somente letras | Elimina a confusão da letra/digit |
min_len / max_len |
Comprimento conhecido | Evita caracteres extras/missing |
regsense=1 |
O caso é importante | Preserva maiúsculas/lowercase |
calc=1 |
Expressão matemática | Retorna resposta computada |
phrase=1 |
Contém espaços | Permite respostas com várias palavras |
language=1 |
Texto cirílico | Usa conjunto de caracteres correto |
language=2 |
Texto latino | Usa conjunto de caracteres correto |
Perguntas frequentes
Por que meu CAPTCHA está sempre errado em um caractere?
Use min_len e max_len para restringir o comprimento da resposta. Verifique também a qualidade da imagem – imagens borradas causam erros de leitura.
Devo usar upload de arquivo ou base64?
Ambos funcionam igualmente bem. Base64 é conveniente para uso programático; o upload de arquivos funciona mais adequado com ferramentas de formulário multipartes.
Como resolvo CAPTCHAs em outros idiomas?
Defina o parâmetro language: 1 para cirílico, 2 para latim. Para outros scripts, omita o parâmetro e deixe o solucionador detectar automaticamente.
Posso resolver CAPTCHAs de áudio com este método?
Não. CAPTCHAs de áudio exigem uma abordagem de resolução diferente. Verifique a documentação do CaptchaAI para suporte de áudio CAPTCHA.