Tutoriales

BLS CAPTCHA: Comprensión de códigos de instrucciones y resolución

Los BLS CAPTCHA presentan una cuadrícula de imágenes de 3 × 3 con un código de instrucción numérico. El usuario debe seleccionar celdas que coincidan con la instrucción. CaptchaAI resuelve BLS CAPTCHA con 100% de precisión: esta guía cubre cómo extraer la cuadrícula, leer el código de instrucciones y enviar todo a la API.


Cómo funcionan los BLS CAPTCHA

Un BLS CAPTCHA muestra:

  1. Una cuadrícula de 3×3 que contiene 9 celdas de imagen
  2. Un código de instrucción numérico (por ejemplo, 664, 123, 546) que especifica qué celdas seleccionar
  3. Las celdas están numeradas de izquierda a derecha y de arriba a abajo:
1  2  3
4  5  6
7  8  9

El código de instrucción le dice al solucionador qué patrón buscar. La respuesta es una serie de índices de celdas (1 a 9) que coinciden.


Paso 1: extraiga imágenes de cuadrícula y código de instrucciones

Pitón (selenio)

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

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

# Find the grid container
grid_cells = driver.find_elements(By.CSS_SELECTOR, ".captcha-grid img")

images = []
for cell in grid_cells:
    src = cell.get_attribute("src")
    if src.startswith("data:image"):
        images.append(src)
    else:
        # Download and convert to base64
        import requests
        img_data = requests.get(src).content
        b64 = base64.b64encode(img_data).decode()
        images.append(f"data:image/png;base64,{b64}")

# Extract the instruction code
instruction_el = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction")
instruction_code = instruction_el.text.strip()
# e.g., "664" or parsed from "Select all boxes with number 664"

import re
code_match = re.search(r'(\d{3,})', instruction_code)
instruction = code_match.group(1) if code_match else instruction_code

print(f"Instruction: {instruction}")
print(f"Images extracted: {len(images)}")

JavaScript (titiritero)

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com/bls-protected-page');

// Extract grid images as base64
const images = await page.evaluate(() => {
  const cells = document.querySelectorAll('.captcha-grid img');
  return Array.from(cells).map(img => {
    const canvas = document.createElement('canvas');
    canvas.width = img.naturalWidth;
    canvas.height = img.naturalHeight;
    canvas.getContext('2d').drawImage(img, 0, 0);
    return canvas.toDataURL('image/png');
  });
});

// Extract instruction code
const instruction = await page.evaluate(() => {
  const el = document.querySelector('.captcha-instruction');
  const match = el.textContent.match(/(\d{3,})/);
  return match ? match[1] : el.textContent.trim();
});

console.log(`Instruction: ${instruction}, Images: ${images.length}`);

Paso 2: enviar a CaptchaAI

El solucionador BLS requiere method=bls, el código instructions y las 9 imágenes como image_base64_1 a image_base64_9.

pitón

import requests
import time
import json

API_KEY = "YOUR_API_KEY"

# Prepare submission data
data = {
    "key": API_KEY,
    "method": "bls",
    "instructions": instruction,
    "json": "1",
}

# Add all 9 images
files = {}
for i, img in enumerate(images):
    files[f"image_base64_{i+1}"] = (None, img)

# Submit
resp = requests.post(
    "https://ocr.captchaai.com/in.php",
    data=data,
    files=files
).json()

if resp["status"] != 1:
    raise Exception(f"Submit error: {resp['request']}")

task_id = resp["request"]
print(f"Task ID: {task_id}")

# Poll for result
for _ in range(20):
    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["status"] == 1:
        solution = json.loads(result["request"])
        print(f"Selected cells: {solution}")  # e.g., [1, 4, 7, 8]
        break
    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(f"Error: {result['request']}")

javascript

const axios = require('axios');
const FormData = require('form-data');

const form = new FormData();
form.append('key', 'YOUR_API_KEY');
form.append('method', 'bls');
form.append('instructions', instruction);
form.append('json', '1');

images.forEach((img, i) => {
  form.append(`image_base64_${i + 1}`, img);
});

const submit = await axios.post('https://ocr.captchaai.com/in.php', form, {
  headers: form.getHeaders(),
});
const taskId = submit.data.request;

// Poll
let solution = null;
for (let i = 0; i < 20; i++) {
  await new Promise(r => setTimeout(r, 5000));
  const poll = await axios.get('https://ocr.captchaai.com/res.php', {
    params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
  });
  if (poll.data.status === 1) {
    solution = JSON.parse(poll.data.request);
    break;
  }
}
console.log('Selected cells:', solution); // e.g., [2, 4, 7]

Paso 3: haz clic en las celdas resueltas

# Selenium — click the cells returned by CaptchaAI
grid_cells = driver.find_elements(By.CSS_SELECTOR, ".captcha-grid .cell")

for cell_index in solution:
    # cell_index is 1-based
    grid_cells[cell_index - 1].click()

# Submit the form
submit_btn = driver.find_element(By.CSS_SELECTOR, ".captcha-submit")
submit_btn.click()
// Puppeteer
const cells = await page.$$('.captcha-grid .cell');
for (const idx of solution) {
  await cells[idx - 1].click();
}
await page.click('.captcha-submit');

Flujo de trabajo completo

def solve_bls_captcha(driver, api_key):
    """Extract, solve, and submit a BLS CAPTCHA."""
    import base64, requests, time, json, re

    # 1. Extract images
    grid_cells = driver.find_elements(By.CSS_SELECTOR, ".captcha-grid img")
    images = []
    for cell in grid_cells:
        src = cell.get_attribute("src")
        if src.startswith("data:image"):
            images.append(src)
        else:
            img_data = requests.get(src).content
            b64 = base64.b64encode(img_data).decode()
            images.append(f"data:image/png;base64,{b64}")

    # 2. Extract instruction
    el = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction")
    match = re.search(r'(\d{3,})', el.text)
    instruction = match.group(1)

    # 3. Submit to CaptchaAI
    data = {"key": api_key, "method": "bls", "instructions": instruction, "json": "1"}
    files = {f"image_base64_{i+1}": (None, img) for i, img in enumerate(images)}
    resp = requests.post("https://ocr.captchaai.com/in.php", data=data, files=files).json()
    task_id = resp["request"]

    # 4. Poll
    for _ in range(20):
        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["status"] == 1:
            solution = json.loads(result["request"])
            break

    # 5. Click cells
    clickable = driver.find_elements(By.CSS_SELECTOR, ".captcha-grid .cell")
    for idx in solution:
        clickable[idx - 1].click()

    return solution

Solución de problemas

problema causa Solución
ERROR_BAD_PARAMETERS Faltan imágenes o no hay instrucciones Asegúrese de que las 9 imágenes sean URI de datos base64 válidos
Celdas incorrectas seleccionadas Mapeo incorrecto de celda a índice Verifique que las celdas estén numeradas del 1 al 9 de izquierda a derecha y de arriba a abajo
Las imágenes no se cargan Restricción de origen cruzado Descargue imágenes del lado del servidor y conviértalas a base64
Código de instrucción vacío Instrucción oculta en la imagen. Extraiga el texto de las instrucciones o realice OCR en la imagen de las instrucciones.

Preguntas frecuentes

¿Qué significa el código de instrucción BLS?

El código de instrucción (por ejemplo, "664") le indica al CAPTCHA qué celdas contienen contenido coincidente. CaptchaAI lo analiza; no es necesario que usted interprete el código usted mismo.

¿Qué tan preciso es CaptchaAI para BLS?

CaptchaAI informa una precisión del 100% para BLS CAPTCHA.


Resuelva BLS CAPTCHA con CaptchaAI: 100% de precisión

Obtenga su clave API encaptchaai.com.


Guías relacionadas

  • Mapeo de coordenadas de imágenes en cuadrícula
  • Referencia de códigos de error CaptchaAI
Los comentarios están deshabilitados para este artículo.