La resolución de Image/text CAPTCHA puede fallar debido a la calidad de la imagen, problemas de formato o parámetros de sugerencias incorrectos. A continuación se explica cómo diagnosticar y corregir los errores más comunes.
Errores de envío
ERROR_WRONG_FILE_EXTENSION
Causa: La imagen no tiene un formato compatible o base64 no es válido.
Arreglo:
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: El archivo de imagen está vacío o la descarga falló.
Arreglo:
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: La imagen supera el tamaño máximo (normalmente 600 KB).
Arreglo:
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)
Se devolvió texto incorrecto
Los personajes se malinterpretan constantemente
Causa: El solucionador confunde caracteres similares (0/O, 1/l/I, 5/S).
Solución: Utilice parámetros de sugerencia para restringir el 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
})
Caso incorrecto (mayúsculas versus minúsculas)
Causa: El solucionador utiliza minúsculas de forma predeterminada.
Solución: Configure regsense=1 para habilitar la distinción entre mayúsculas y 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 o faltantes
Causa: El ruido se interpreta como caracteres o los caracteres están fusionados.
Solución: Establecer restricciones de longitud 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
})
Expresión matemática no calculada
Causa: El solucionador lee el texto "3+7" en lugar de calcular la respuesta "10".
Solución: Establecer 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 calidad de imagen
CAPTCHA demasiado pequeño
Problema: Las imágenes muy pequeñas (de menos de 50 píxeles de altura) pierden detalles de los caracteres.
Solución: Capture en el tamaño más grande disponible. Si la página muestra el captcha pequeño, busque una URL de origen de mayor resolución:
# 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 está animado
Problema: Algunos CAPTCHA usan GIF animados donde el texto solo es visible en ciertos cuadros.
Solución: Extrae el fotograma correcto:
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 tiene fondo transparente
Problema: Es posible que PNG con fondo transparente no se reproduzca correctamente para OCR.
Solución: Añade un fondo blanco:
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")
Informar soluciones incorrectas
Si CaptchaAI devuelve un texto incorrecto, infórmalo:
# Report bad answer
requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "reportbad",
"id": task_id
})
Esto mejora la precisión del solucionador y puede reembolsar el costo de la resolución.
Lista de verificación de mejora de la precisión
| Parámetro | Cuándo usar | Efecto |
|---|---|---|
numeric=1 |
Solo dígitos | Elimina la confusión letra/dígito |
numeric=2 |
Solo letras | Elimina la confusión letra/dígito |
min_len / max_len |
Longitud conocida | Previene caracteres extra o faltantes |
regsense=1 |
Diferencia mayúsculas/minúsculas | Conserva el caso original |
calc=1 |
Expresión matemática | Devuelve la respuesta calculada |
phrase=1 |
Contiene espacios | Permite respuestas de varias palabras |
language=1 |
Texto cirílico | Usa el juego de caracteres correcto |
language=2 |
Texto latino | Usa el juego de caracteres correcto |
Preguntas frecuentes
¿Por qué mi CAPTCHA siempre tiene un carácter incorrecto?
Utilice min_len y max_len para limitar la longitud de la respuesta. Verifique también la calidad de la imagen: las imágenes borrosas provocan errores de lectura.
¿Debo usar la carga de archivos o base64?
Ambos funcionan igual de bien. Base64 es conveniente para uso programático; La carga de archivos funciona mejor con herramientas de formularios de varias partes.
¿Cómo resuelvo CAPTCHA en otros idiomas?
Configure el parámetro language: 1 para cirílico, 2 para latín. Para otros scripts, omita el parámetro y deje que el solucionador lo detecte automáticamente.
¿Puedo resolver CAPTCHA de audio con este método?
No. Los CAPTCHA de audio requieren un enfoque de resolución diferente. Consulte la documentación de CaptchaAI para obtener compatibilidad con CAPTCHA de audio.
Guías relacionadas
- Resolución de CAPTCHA de imagen mediante API
- Referencia de códigos de error CaptchaAI