La resolución de BLS CAPTCHA presenta desafíos únicos porque utiliza una implementación personalizada. A continuación se detallan los errores más comunes y sus soluciones.
Errores de envío de API
ERROR_BAD_PARAMETERS
Causa: Faltan parámetros requeridos, ya sean instrucciones o imágenes.
Arreglo:
# WRONG — missing instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "bls",
"image_base64_1": img1, "json": 1
})
# CORRECT — include instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "bls",
"instructions": "Select all images with a car",
"image_base64_1": img1, "json": 1
})
ERROR_WRONG_FILE_EXTENSION
Causa: Los datos de la imagen no son base64 válidos o tienen un formato no compatible.
Arreglo:
- Asegúrese de que las imágenes sean PNG o JPEG codificadas en base64
- Eliminar el prefijo
data:image/...;base64, - Verifique que la cadena base64 no esté truncada
import base64
# Strip the data URI prefix
src = img_element.get_attribute("src")
if src.startswith("data:image"):
b64 = src.split(",")[1]
else:
# Download and encode
img_data = requests.get(src).content
b64 = base64.b64encode(img_data).decode()
ERROR_CAPTCHA_UNSOLVABLE
Causa: Las imágenes son de muy baja calidad, están borrosas o las instrucciones son ambiguas.
Arreglo:
- Capture imágenes a máxima resolución
- Asegúrese de que el texto de las instrucciones se extraiga correctamente
- Reintentar: algunos desafíos son inherentemente más difíciles
Errores de extracción de imágenes
Las imágenes se cargan dinámicamente
Problema: Las imágenes no están en el DOM cuando se carga la página por primera vez.
Solución: Espere a que el captcha se procese por completo:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Wait for captcha images to load
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".captcha-image img"))
)
Las imágenes son lienzos, no elementos img.
Problema: Algunas implementaciones de BLS representan imágenes en elementos <canvas>.
Solución: Extraiga los datos del lienzo como base64:
canvas_elements = driver.find_elements(By.CSS_SELECTOR, ".captcha-canvas")
for i, canvas in enumerate(canvas_elements, 1):
b64 = driver.execute_script(
"return arguments[0].toDataURL('image/png').split(',')[1];",
canvas
)
payload[f"image_base64_{i}"] = b64
Imágenes detrás del anti-hotlinking
Problema: Las URL de imágenes devuelven 403 cuando se obtienen fuera del navegador.
Solución: Extrae imágenes dentro del contexto del navegador:
# Get image data from within the browser
b64 = driver.execute_script("""
var img = arguments[0];
var canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
canvas.getContext('2d').drawImage(img, 0, 0);
return canvas.toDataURL('image/png').split(',')[1];
""", img_element)
Errores de aplicación de solución
Imágenes incorrectas seleccionadas
Causa: El orden de las imágenes no coincide entre la extracción y la visualización.
Solución: Mantener pedidos consistentes:
# Ensure images are indexed in display order
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
# The order of find_elements matches DOM order = display order
for i, img in enumerate(captcha_imgs, 1):
payload[f"image_base64_{i}"] = extract_base64(img)
Los índices de solución no coinciden
Causa: CaptchaAI devuelve índices basados en 1, pero su código utiliza índices basados en 0.
Arreglo:
solution = result["request"] # e.g., "1,3,5"
indices = [int(i) for i in solution.split(",")]
# Convert to 0-based for array access
for idx in indices:
captcha_imgs[idx - 1].click() # 1-based → 0-based
El envío del formulario falla después de la selección correcta
Causa: Faltan tokens o campos de formulario adicionales.
Solución: Verifique los campos ocultos que deben enviarse junto con el captcha:
# Look for hidden captcha tokens
hidden_fields = driver.find_elements(By.CSS_SELECTOR, "input[type='hidden']")
for field in hidden_fields:
name = field.get_attribute("name")
value = field.get_attribute("value")
print(f"Hidden field: {name}={value}")
Errores de tiempo de espera
Captcha caduca antes de que se complete la resolución
Problema: BLS CAPTCHA tiene una ventana de validez corta.
Arreglo:
- Extraiga imágenes y envíelas a CaptchaAI inmediatamente
- No extraiga imágenes y luego espere antes de enviarlas
- Si la resolución tarda más de 60 segundos, es posible que el captcha haya caducado: actualice y vuelva a intentarlo
Las consultas tardan demasiado
Solución: Asegúrese de realizar la consulta correctamente:
# Standard polling pattern
for _ in range(30): # 30 attempts × 5 seconds = 150 seconds max
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") == "ERROR_CAPTCHA_UNSOLVABLE":
# Don't keep polling — start over
raise Exception("Unsolvable")
Lista de verificación de depuración
| Verificación | Acción |
|---|---|
| ¿Instrucciones extraídas? | Imprima y verifique el texto de instrucciones. |
| ¿Imágenes válidas? | Guarde base64 en un archivo y ábralo para verificar |
| ¿El recuento de imágenes es correcto? | Compare el número de imágenes enviadas con las mostradas |
| ¿El orden de las imágenes es correcto? | Verificar que el orden DOM coincida con el orden de visualización |
| ¿Prefijo Base64 eliminado? | Quitar data:image/...;base64, |
| ¿Formato de solución? | Analizar índices basados en 1 separados por comas |
| ¿Conversión de índice? | Resta 1 para acceder a la matriz basada en 0 |
Preguntas frecuentes
¿Cuántas imágenes debo enviar a CaptchaAI?
Envíe todas las imágenes que se muestran en el CAPTCHA, normalmente entre 3 y 9. Utilice image_base64_1 a image_base64_9.
¿Qué pasa si la instrucción es en un idioma distinto del inglés?
Envíe las instrucciones exactamente como se muestran. CaptchaAI maneja instrucciones multilingües.
¿Puedo precargar imágenes para acelerar la resolución?
No. BLS genera imágenes únicas por sesión. Debes extraerlos nuevos para cada instancia de captcha.
¿Qué pasa si BLS cambia su formato CAPTCHA?
Si el formato cambia, es posible que sea necesario actualizar el código de extracción de imágenes. Los parámetros de la API CaptchaAI (method=bls, instrucciones, imágenes) seguirán siendo los mismos.
Guías relacionadas
- Cómo resolver BLS CAPTCHA paso a paso
- Referencia de códigos de error CaptchaAI