Comparisons

Cuadrícula BLS CAPTCHA y reCAPTCHA

Ambos presentan imágenes que los usuarios deben seleccionar según un mensaje de texto. Pero BLS CAPTCHA es una implementación personalizada utilizada exclusivamente en los sistemas de visas BLS International, mientras que reCAPTCHA es la solución implementada globalmente de Google. Los enfoques de resolución, los requisitos de integración y los métodos de la API CaptchaAI difieren significativamente.


Comparación lado a lado

Característica BLS CAPTCHA Cuadrícula reCAPTCHA
Proveedor BLS Internacional (personalizado) Google
Formato Imágenes separadas (3–9) Imagen única dividida en cuadrícula (3×3 o 4×4)
Mosaicos dinámicos No: conjunto fijo de imágenes Sí, aparecen nuevas tras cada selección
Análisis de comportamiento Mínimo Extensivo (ratón, timing, IP)
Sistema de puntuación Ninguno Análisis de riesgo por solicitud
Método API method=bls method=userrecaptcha
Parámetros necesarios instructions, image_base64_1..9 googlekey, pageurl
Formato de respuesta Índices de imágenes (ej. 1,3,5) Cadena de token
Resolución basada en tokens No: resuelve imágenes directamente Sí, el método token gestiona la cuadrícula internamente
Se requiere navegador Sí (extraer imágenes del DOM) Opcional (el método token funciona sin navegador)
Dónde se usa Solo sitios de citas para visa BLS Millones de sitios en todo el mundo
Tiempo típico de resolución 5-15 segundos 10-30 segundos

Resolviendo BLS CAPTCHA con CaptchaAI

BLS requiere extraer cada imagen de la página, codificarlas como base64 y enviarlas con el texto de instrucciones.

Python:

import requests
import base64
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example-bls-site.com/appointment")

# Step 1: Extract instruction text
instruction = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction").text
# Example: "Select all images with a motorcycle"

# Step 2: Extract and encode each image
images = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
image_data = {}
for i, img in enumerate(images, 1):
    # Get image source and convert to base64
    src = img.get_attribute("src")
    if src.startswith("data:image"):
        b64 = src.split(",")[1]
    else:
        img_bytes = requests.get(src).content
        b64 = base64.b64encode(img_bytes).decode()
    image_data[f"image_base64_{i}"] = b64

# Step 3: Submit to CaptchaAI
payload = {
    "key": "YOUR_API_KEY",
    "method": "bls",
    "instructions": instruction,
    **image_data
}
resp = requests.post("https://ocr.captchaai.com/in.php", data=payload)
task_id = resp.text.split("|")[1]

# Step 4: Poll for result
for _ in range(30):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id
    })
    if result.text.startswith("OK|"):
        indices = result.text.split("|")[1]  # e.g., "1,3,5"
        break

# Step 5: Click the correct images
for idx in indices.split(","):
    images[int(idx) - 1].click()
    time.sleep(0.3)  # Small delay between clicks

Nodo.js:

const axios = require("axios");
const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({ headless: "new" });
  const page = await browser.newPage();
  await page.goto("https://example-bls-site.com/appointment");

  // Extract instruction text
  const instruction = await page.$eval(
    ".captcha-instruction",
    (el) => el.textContent,
  );

  // Extract images as base64
  const imageElements = await page.$$(".captcha-image img");
  const imageData = {};
  for (let i = 0; i < imageElements.length; i++) {
    const src = await imageElements[i].evaluate((el) => el.src);
    let b64;
    if (src.startsWith("data:image")) {
      b64 = src.split(",")[1];
    } else {
      const resp = await axios.get(src, { responseType: "arraybuffer" });
      b64 = Buffer.from(resp.data).toString("base64");
    }
    imageData[`image_base64_${i + 1}`] = b64;
  }

  // Submit to CaptchaAI
  const formData = new URLSearchParams({
    key: "YOUR_API_KEY",
    method: "bls",
    instructions: instruction,
    ...imageData,
  });
  const submitResp = await axios.post(
    "https://ocr.captchaai.com/in.php",
    formData.toString(),
  );
  const taskId = submitResp.data.split("|")[1];

  // Poll for result
  let indices;
  for (let i = 0; i < 30; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: "YOUR_API_KEY", action: "get", id: taskId },
    });
    if (result.data.startsWith("OK|")) {
      indices = result.data.split("|")[1];
      break;
    }
  }

  // Click correct images
  for (const idx of indices.split(",")) {
    await imageElements[parseInt(idx) - 1].click();
    await new Promise((r) => setTimeout(r, 300));
  }

  await browser.close();
})();

Resolviendo la cuadrícula reCAPTCHA con CaptchaAI

reCAPTCHA utiliza un enfoque basado en tokens: no es necesaria extracción de imágenes.

Python:

import requests
import time

# Step 1: Extract sitekey from page
# <div class="g-recaptcha" data-sitekey="6Le-wvkS..."></div>
sitekey = "6Le-wvkSAAAAAPBMRTvw..."
page_url = "https://example.com/form"

# Step 2: Submit to CaptchaAI
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url
})
task_id = resp.text.split("|")[1]

# Step 3: Poll for token
for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id
    })
    if result.text.startswith("OK|"):
        token = result.text.split("|")[1]
        break

# Step 4: Inject token (no clicking needed)
# Option A: Hidden field injection
driver.execute_script(
    f'document.getElementById("g-recaptcha-response").value = "{token}";'
)
# Option B: Pure HTTP submission
requests.post(page_url, data={"g-recaptcha-response": token, "other_field": "value"})

Nodo.js:

const axios = require("axios");

async function solveRecaptchaGrid(sitekey, pageUrl) {
  // Submit
  const submitResp = await axios.get("https://ocr.captchaai.com/in.php", {
    params: {
      key: "YOUR_API_KEY",
      method: "userrecaptcha",
      googlekey: sitekey,
      pageurl: pageUrl,
    },
  });
  const taskId = submitResp.data.split("|")[1];

  // Poll for token
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: "YOUR_API_KEY", action: "get", id: taskId },
    });
    if (result.data.startsWith("OK|")) {
      return result.data.split("|")[1];
    }
  }
  throw new Error("Solve timed out");
}

Comparación de complejidad de integración

Aspecto BLS Cuadrícula reCAPTCHA
Extracción de imágenes Debe extraer cada imagen del DOM manualmente No es necesario: el método del token se maneja internamente
Manejo de instrucciones Debe extraer instrucciones de texto de la página. No es necesario
Codificación base64 Requerido para cada imagen No es necesario
Aplicación de solución Haga clic en imágenes individuales según los índices devueltos Inyecte token en un campo oculto o HTTP POST
Automatización del navegador Requerido: no hay alternativa sin cabeza Opcional: puede utilizar solicitudes HTTP puras
Recuperación de errores Vuelva a extraer imágenes en caso de error Volver a solicitar el token en caso de error
resolución concurrente Limitado: imágenes vinculadas a la sesión del navegador Fácil: las solicitudes de token no tienen estado
Líneas de código (típico) 40-60 líneas 15-25 líneas

Cuándo usar qué solucionador

Escenario Enfoque recomendado
Reserva de cita para la visa BLS Utilice method=bls con extracción de imágenes
Cualquier sitio con reCAPTCHA Utilice method=userrecaptcha con la clave del sitio
Sitio BLS con reCAPTCHA integrado Compruebe cuál protege la acción: los sitios BLS a veces usan ambos
Captcha de imagen desconocido Primero verifique si es de la marca BLS; si no, prueba los métodos reCAPTCHA u OCR

Solución de problemas

problema Arreglo BLS corrección de reCAPTCHA
Se devolvió la respuesta incorrecta Verifique que el texto de las instrucciones coincida con lo que muestra la página Verifique que la clave del sitio y la URL de la página sean correctas
Las imágenes no se cargan Agregue User-Agent y cookies al buscar URL de imágenes No aplicable: no hay imágenes para recuperar
Token rechazado Haga clic en los índices en el orden correcto en la página. Inyectar en g-recaptcha-response Y ejecutar devolución de llamada
Resolver demasiado lento Reduzca el recuento de imágenes: envíe solo imágenes visibles Utilice proxy cerca del sitio de destino

Preguntas frecuentes

¿Cuál es más difícil de resolver?

BLS requiere más trabajo de integración (extracción de imágenes, análisis de instrucciones y clics basados en índices), pero las imágenes suelen ser más claras y simples. reCAPTCHA es más fácil de integrar (método de token), pero los desafíos de Google pueden ser más complejos con mosaicos dinámicos.

¿Puedo utilizar el método del token reCAPTCHA para BLS?

No. BLS no es una implementación de reCAPTCHA. Debe utilizar method=bls con imágenes individuales codificadas en base64 y el texto de instrucciones.

¿Ambos utilizan la tecnología de Google?

No. BLS CAPTCHA es una implementación personalizada y patentada creada para los servicios de visas de BLS International. reCAPTCHA es el producto de Google que se utiliza globalmente en millones de sitios web.

¿Qué es más rentable resolver a escala?

Las soluciones de tokens reCAPTCHA son generalmente más rentables para operaciones de gran volumen porque la integración es más simple (sin gastos generales de extracción de imágenes) y puede ejecutar solicitudes sin estado simultáneas. La resolución de BLS requiere una sesión de navegador para cada resolución.

¿Puedo resolver ambos tipos en la misma página?

Sí. Algunos sitios BLS utilizan su CAPTCHA personalizado para la verificación inicial y reCAPTCHA para el envío de formularios. Detecte cada tipo por separado y utilice el método CaptchaAI apropiado para cada uno.


Guías relacionadas

  • Cómo resolver BLS CAPTCHA paso a paso
  • Cómo resolver reCAPTCHA v2 usando API
  • Errores y solución de problemas de BLS CAPTCHA
Los comentarios están deshabilitados para este artículo.

Publicaciones relacionadas

Comparisons Cloudflare Managed Challenge vs Interactive Challenge
Cloudflare Managed Challenge vs Interactive Challenge: diferencias de comportamiento, códigos HTTP, métodos de resolución con Captcha AI y cuándo usar cada uno.

Cloudflare Managed Challenge vs Interactive Challenge: diferencias de comportamiento, códigos HTTP, métodos de...

Apr 18, 2026
Comparisons CAPTCHA de texto vs CAPTCHA de imagen: comparación de desarrolladores
Comparativa práctica de CAPTCHA de texto vs CAPTCHA de imagen: comparación de desarrolladores, centrada en diferencias de costo, precisión, velocidad y esfuerzo...

Comparativa práctica de CAPTCHA de texto vs CAPTCHA de imagen: comparación de desarrolladores, centrada en dif...

Apr 30, 2026