Comparações

Grade BLS CAPTCHA vs reCAPTCHA - Comparação

Ambos apresentam imagens que os usuários devem selecionar com base em um prompt de texto. Mas o BLS CAPTCHA é uma implementação personalizada usada exclusivamente nos sistemas de vistos BLS International, enquanto o reCAPTCHA é a solução implantada globalmente pelo Google. As abordagens de resolução, os requisitos de integração e os métodos da API CaptchaAI diferem significativamente.


Comparação lado a lado

Recurso BLS CAPTCHA Grade reCAPTCHA
Provedor BLS Internacional (personalizado) Google
Formato Separe imagens distintas (3-9) Imagem única dividida em grade (3×3 ou 4×4)
Blocos dinâmicos Não – conjunto fixo de imagens Sim – novos blocos aparecem gradualmente após a seleção
Análise comportamental Mínimo Extenso (mouse, temporização, IP)
Sistema de pontuação Nenhum Análise de risco em cada solicitação
Método API method=bls method=userrecaptcha
Parâmetros necessários instructions, image_base64_1..9 googlekey, pageurl
Formato de resposta Índices de imagem (por exemplo, 1,3,5) Sequência de token
Solução baseada em token Não – deve resolver as imagens diretamente Sim – o método token lida com a grade internamente
Navegador necessário Sim (deve extrair imagens do DOM) Opcional (o método token funciona sem navegador)
Onde usado Apenas sites de agendamento de visto BLS Milhões de sites em todo o mundo
Tempo de resolução típico 5-15 segundos 10-30 segundos

Resolvendo BLS CAPTCHA com CaptchaAI

O BLS requer extrair cada imagem da página, codificá-las como base64 e enviá-las com o texto de instrução.

Píton:

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

Node.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();
})();

Resolvendo grade reCAPTCHA com CaptchaAI

O reCAPTCHA usa uma abordagem baseada em token – sem necessidade de extração de imagem.

Píton:

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"})

Node.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");
}

Comparação de complexidade de integração

Aspecto BLS Grade reCAPTCHA
Extração de imagem Deve extrair cada imagem do DOM manualmente Não é necessário — o método token trata internamente
Tratamento de instruções Deve extrair instruções de texto da página Não é necessário
Codificação Base64 Obrigatório para todas as imagens Não é necessário
Aplicação de solução Clique em imagens individuais por índices retornados Injetar token em campo oculto ou HTTP POST
Automação do navegador Obrigatório - sem alternativa modo headless Opcional – pode usar solicitações HTTP puras
Recuperação de erros Extraia novamente as imagens em caso de falha Solicitar novamente o token em caso de falha
Resolução simultânea Limitado – imagens vinculadas à sessão do navegador Fácil – as solicitações de token não têm estado
Linhas de código (típico) 40-60 linhas 15-25 linhas

Quando usar qual solucionador

Cenário Abordagem recomendada
Reserva de visto BLS Use method=bls com extração de imagem
Qualquer site com reCAPTCHA Use method=userrecaptcha com sitekey
Site BLS com reCAPTCHA incorporado Verifique qual deles protege a ação – os sites BLS às vezes usam ambos
Captcha de imagem desconhecido Verifique primeiro se é da marca BLS; caso contrário, tente os métodos reCAPTCHA ou OCR

Solução de problemas

Problema Correção de BLS correção reCAPTCHA
Resposta errada retornada Verifique se o texto das instruções corresponde ao que a página mostra Verifique se a chave do site e o pageurl estão corretos
Imagens não carregando Adicione User-Agent e cookies ao buscar URLs de imagens Não aplicável — não há imagens para buscar
Token rejeitado Clique nos índices na ordem correta na página Injete em g-recaptcha-response E execute o retorno de chamada
Resolva muito devagar Reduza a contagem de imagens – envie apenas imagens visíveis Use proxy próximo ao site de destino

Perguntas frequentes

O que é mais difícil de resolver?

O BLS requer mais trabalho de integração (extração de imagens, análise de instruções e cliques baseados em índice), mas as imagens geralmente são mais claras e simples. O reCAPTCHA é mais fácil de integrar (método token), mas os desafios do Google podem ser mais complexos com blocos dinâmicos.

Posso usar o método de token reCAPTCHA para BLS?

Não. O BLS não é uma implementação do reCAPTCHA. Você deve usar method=bls com imagens individuais codificadas em base64 e o texto de instruções.

Ambos usam a tecnologia do Google?

Não. BLS CAPTCHA é uma implementação personalizada e proprietária desenvolvida para serviços de visto BLS International. O reCAPTCHA é um produto do Google usado globalmente em milhões de sites.

O que é mais econômico para resolver em escala?

As soluções de token reCAPTCHA geralmente são mais econômicas para operações de alto volume porque a integração é mais simples (sem sobrecarga de extração de imagem) e você pode executar solicitações simultâneas sem estado. A resolução BLS requer uma sessão do navegador para cada solução.

Posso resolver os dois tipos na mesma página?

Sim. Alguns sites BLS usam CAPTCHA personalizado para verificação inicial e reCAPTCHA para envio de formulário. Detecte cada tipo separadamente e use o método CaptchaAI apropriado para cada um.


Guias relacionados

  • Como resolver BLS CAPTCHA passo a passo— passo a passo completo da integração BLS
  • Como resolver reCAPTCHA v2 usando API- tutorial completo do reCAPTCHA v2
  • Desafio da grade reCAPTCHA explicado— como funcionam os desafios da rede
  • Erros e solução de problemas do BLS Captcha— Correções de erros específicos do BLS
Os comentários estão desativados para este artigo.