A resolução de CAPTCHA de imagem em grade pode falhar devido à qualidade da imagem, incompatibilidades de formato ou aplicação incorreta da solução. Aqui estão os erros mais comuns e como resolvê-los.
Erros de envio de imagem
ERROR_WRONG_FILE_EXTENSION
Causa: O arquivo enviado não tem um formato de imagem válido.
Correção:
- Use apenas o formato PNG ou JPEG
- Verifique se a string base64 está codificada corretamente
- 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 excede o tamanho máximo do arquivo (normalmente 600 KB).
Correção:
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:
- Verifique se o elemento da imagem foi carregado antes de extrair
- Verifique se o atributo
srcnão está vazio - Aguarde imagens carregadas lentamente
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"
)
Resolvendo erros
ERROR_CAPTCHA_UNSOLVABLE
Causa: a imagem está muito desfocada, distorcida ou os objetos estão irreconhecíveis.
Correção:
- Capture a imagem em resolução total – não reduza a escala
- Certifique-se de que nenhuma sobreposição ou marca d’água obscureça a grade
- Tente novamente com um novo captcha (alguns desafios são inerentemente ambíguos)
Células erradas identificadas
Causa: Baixa qualidade de imagem ou captura parcial.
Correção:
- Captura de tela de todo o elemento captcha, incluindo bordas
- Não corte muito apertado – inclua alguns pixels de margem
- Verifique salvando a imagem capturada e revisando-a manualmente
# 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 de aplicação de solução
Erros de índice off-by-one
Causa: Incompatibilidade entre a resposta da API baseada em 1 e a indexação de matriz baseada em 0.
# 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 aos cliques
Causa: O destino do clique está errado — sobreposição, iframe ou shadow DOM.
Correção:
# 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 após clicar
Causa: grades dinâmicas estilo reCAPTCHA substituem os blocos.
Correção: Use o método 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
O Captcha expira antes que a solução retorne
Causa: Grid CAPTCHAs normalmente expiram em 2 a 3 minutos.
Correção:
- Envie a imagem imediatamente após a captura
- Se a resolução demorar mais de 60 segundos, atualize e tente novamente
CAPCHA_NOT_READY faz loop indefinidamente
Causa: A tarefa pode ter falhado silenciosamente.
Correção: Defina uma contagem máxima de novas tentativas e trate as falhas:
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")
Lista de verificação de depuração
| Verifique | Ação |
|---|---|
| Formato de imagem? | PNG ou JPEG, devidamente codificado |
| Tamanho da imagem? | Menos de 600 KB |
| Grade completa capturada? | Incluir grade inteira com margens |
| Qualidade da imagem? | Claro, não desfocado ou reduzido |
| Formato da solução? | Analisar índices separados por vírgula corretamente |
| Base do índice? | Converter baseado em 1 em baseado em 0 para matrizes |
| Contexto do iframe? | Mude para iframe captcha, se presente |
| Captcha expirou? | Envie imediatamente após a captura |
Perguntas frequentes
Qual formato de imagem oferece os mais adequado resultados?
PNG produz os mais adequado resultados porque não tem perdas. JPEG funciona, mas a compactação pesada pode desfocar os limites das células e reduzir a precisão.
Devo incluir o texto das instruções com imagens de grade?
Para method=post com recaptcha=1, a instrução não é necessária — o solucionador identifica os objetos visualmente. Para method=bls, inclua sempre o texto das instruções.
Posso resolver vários CAPTCHAs de grade em paralelo?
Sim. Cada solução é independente. Envie várias tarefas e pesquise cada uma delas separadamente.
E se a grade tiver dimensões fora do padrão?
CaptchaAI analisa a imagem como está. Grades não padronizadas (por exemplo, 5×3, 2×4) são tratadas com base na análise visual, em vez de suposições de grade fixa.
Guias relacionados
- Como resolver Grid Image CAPTCHA automaticamente
- Como funcionam os desafios Grid Image CAPTCHA
- Referência de códigos de erro CaptchaAI