Troubleshooting

Erros e correções comuns de CAPTCHA de imagem de grade

ERROR_CAPTCHA_UNSOLVABLE do nada, células clicadas na posição errada ou um CAPCHA_NOT_READY que não sai do loop de polling: a maioria dos erros de CAPTCHA de imagem em grade nasce de um destes quatro pontos — formato do arquivo, qualidade da captura, indexação da solução ou expiração do desafio.

Veja a correção direta para cada erro do CaptchaAI, sem abrir chamado de suporte.


Erros ao enviar a imagem do captcha

ERROR_WRONG_FILE_EXTENSION

Causa: o arquivo enviado não está em um formato de imagem válido. Correção: use apenas PNG ou JPEG, confirme que a string base64 está bem codificada e remova o prefixo data:image/...;base64, antes de enviar.

# WRONG — includes data URI prefix
body = "data:image/png;base64,iVBORw0KGgo..."

# CORRECT — raw base64 only
body = "iVBORw0KGgo..."

ERROR_TOO_BIG_CAPTCHA_FILESIZE

Causa: a imagem ultrapassa o tamanho máximo aceito (geralmente 600 KB). Correção: redimensione antes de codificar:

from PIL import Image
import io
import base64

# Resize if too large
img = Image.open("captcha.png")
if img.width > 600:
    ratio = 600 / img.width
    img = img.resize((600, int(img.height * ratio)), Image.LANCZOS)

buffer = io.BytesIO()
img.save(buffer, format="PNG")
b64 = base64.b64encode(buffer.getvalue()).decode()

ERROR_ZERO_CAPTCHA_FILESIZE

Causa: arquivo vazio ou falha na extração da imagem. Correção: confirme que o elemento carregou antes de extrair, verifique se o atributo src não está vazio e aguarde imagens com lazy loading.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Wait for image to load
WebDriverWait(driver, 10).until(
    lambda d: d.find_element(By.CSS_SELECTOR, ".captcha img").get_attribute("complete") == "true"
)

Por que a resolução falha

ERROR_CAPTCHA_UNSOLVABLE

Causa: a imagem está borrada, distorcida, ou os objetos não são reconhecíveis. Correção: capture a imagem em resolução total (nunca reduza a escala), confirme que nenhuma sobreposição ou marca d'água cobre a grade e tente de novo com um captcha novo — alguns desafios são ambíguos até para um humano.

Células erradas na resposta

Causa: captura parcial ou imagem de baixa qualidade.

Capture todo o elemento do captcha, incluindo as bordas. Não recorte rente demais — deixe alguns pixels de margem e revise a imagem antes de enviar:

# Take a proper element screenshot
captcha_el = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
captcha_el.screenshot("debug_captcha.png")

# Open and check manually
from PIL import Image
Image.open("debug_captcha.png").show()

Erros ao aplicar a solução

Índice deslocado em um (off-by-one)

Causa: a resposta da API é baseada em 1, mas a indexação do array é baseada em 0.

Subtraia 1 de cada índice antes de localizar a célula no array — é a única correção necessária:

# API returns "1,3,5" (1-based)
solution = "1,3,5"
indices = [int(i) for i in solution.split(",")]

# DON'T: use directly as array index
# cells[1], cells[3], cells[5]  ← WRONG (off by one)

# DO: convert to 0-based
for idx in indices:
    cells[idx - 1].click()  # 1→0, 3→2, 5→4

As células não respondem ao clique

Causa: o alvo do clique está errado — sobreposição, iframe ou shadow DOM. Correção: confirme o contexto certo antes de clicar:

# Check if captcha is in an iframe
iframes = driver.find_elements(By.TAG_NAME, "iframe")
for iframe in iframes:
    if "captcha" in iframe.get_attribute("src").lower():
        driver.switch_to.frame(iframe)
        break

# Now find and click cells
cells = driver.find_elements(By.CSS_SELECTOR, ".grid-cell")

Grade dinâmica: os blocos mudam depois do clique

Causa: grades dinâmicas ao estilo reCAPTCHA substituem os blocos. Correção: use o método de token em vez do método de imagem para reCAPTCHA:

# Token method handles dynamic grids automatically
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com",
    "json": 1
})

Erros de tempo limite e expiração

O captcha expira antes da resposta voltar

Causa: grades de CAPTCHA costumam expirar em 2 a 3 minutos. Correção: envie a imagem imediatamente após capturá-la; se passar de 60 segundos, atualize a página e tente de novo. Worker longe da CaptchaAI? Meça o RTT antes de suspeitar da resolução.

CAPCHA_NOT_READY em loop infinito

Causa: a tarefa pode ter falhado silenciosamente. Correção: defina um número máximo de tentativas e trate as falhas de verdade:

for attempt in range(30):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": 1
    }).json()

    if result.get("status") == 1:
        return result["request"]
    if result.get("request") not in ["CAPCHA_NOT_READY"]:
        break  # Actual error, stop polling

raise Exception("Grid captcha solve failed — refresh and retry")

Perguntas frequentes

Por que o ERROR_CAPTCHA_UNSOLVABLE aparece mesmo com uma imagem nítida?

Geralmente porque a instrução visual não corresponde a nenhum objeto reconhecível, ou um elemento (banner, cookies) sobrepõe a grade no print. Capture de novo com a página totalmente carregada.

PNG ou JPEG: qual formato reduz mais os erros de resolução?

PNG, porque não perde informação na compactação. JPEG funciona, mas compressão pesada borra os limites das células e derruba a precisão — evite qualidade abaixo de 85% se optar por JPEG.

Como isolar se a falha é na captura da tela ou no envio para a API?

Salve a imagem em disco antes de codificar em base64 e abra o arquivo manualmente. Se já estiver cortada, borrada ou vazia, o problema está na captura (Selenium, Playwright), não na API.

Dá para enviar vários CAPTCHAs de grade em paralelo sem aumentar a taxa de erro?

Sim. Cada tarefa é independente — enviar em paralelo não aumenta a chance de erro. Faça o polling de cada task_id separadamente e respeite o limite de threads do plano.

Preciso me preocupar com dados pessoais ao salvar prints do captcha para depurar?

Se a captura inclui a página inteira, não só o elemento do captcha, ela pode registrar dados de terceiros. Trate esses arquivos como dado sensível sob a LGPD: limite a retenção e capture só o elemento do captcha (captcha_el.screenshot(...)), não a tela cheia.


Checklist rápido de depuração

Confira estes oito pontos antes de abrir chamado — a maioria dos erros cai em um deles:

  • Formato da imagem? PNG ou JPEG, codificado corretamente.
  • Tamanho da imagem? Abaixo de 600 KB.
  • Grade completa capturada? Grade inteira, com margens.
  • Qualidade da imagem? Nítida, sem desfoque ou redução de escala.
  • Formato da solução? Índices separados por vírgula, corretos.
  • Base do índice? Converter 1-based para 0-based.
  • Contexto do iframe? Trocar para o iframe, se houver.
  • Captcha expirado? Enviar logo após a captura.

Guias relacionados

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