Comparatifs

Grille BLS CAPTCHA et reCAPTCHA

Les deux présentent des images que les utilisateurs doivent sélectionner en fonction d’une invite texte. Mais BLS CAPTCHA est une implémentation personnalisée utilisée exclusivement sur les systèmes de visa BLS International, tandis que reCAPTCHA est la solution déployée par Google à l'échelle mondiale. Les approches de résolution, les exigences d'intégration et les méthodes de l'API CaptchaAI diffèrent considérablement.


Comparaison côte à côte

Caractéristique BLS CAPTCHA Grille reCAPTCHA
Fournisseur BLS International (sur mesure) Google
Formater Images distinctes séparées (3-9) Image unique divisée en grille (3 × 3 ou 4 × 4)
Tuiles dynamiques Non - ensemble d'images fixe Oui : les nouvelles vignettes apparaissent en fondu après la sélection
Analyse comportementale Minime Extensif (souris, timing, IP)
Système de notation Aucun Analyse des risques à chaque demande
Méthode API method=bls method=userrecaptcha
Paramètres nécessaires instructions, image_base64_1..9 googlekey, pageurl
Format de réponse Indices d'image (par exemple, 1,3,5) Chaîne de jeton
Résolution basée sur des jetons Non - doit résoudre les images directement Oui - la méthode token gère la grille en interne
Navigateur requis Oui (doit extraire les images du DOM) Facultatif (la méthode du jeton fonctionne sans navigateur)
Où utilisé Sites de rendez-vous pour les visas BLS uniquement Des millions de sites dans le monde
Temps de résolution typique 5-15 secondes 10-30 secondes

Résoudre BLS CAPTCHA avec CaptchaAI

BLS nécessite d'extraire chaque image de la page, de les encoder en base64 et de les envoyer avec le texte d'instruction.

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

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

Résolution de la grille reCAPTCHA avec CaptchaAI

reCAPTCHA utilise une approche basée sur des jetons : aucune extraction d'image n'est nécessaire.

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

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

Comparaison de la complexité de l'intégration

Aspect BLS Grille reCAPTCHA
Extraction d'images Doit extraire chaque image du DOM manuellement Non nécessaire : la méthode de jeton est gérée en interne
Gestion des instructions Doit extraire les instructions textuelles de la page Pas nécessaire
Encodage Base64 Obligatoire pour chaque image Pas nécessaire
Application de solutions Cliquez sur des images individuelles par indices renvoyés Injecter le jeton dans un champ caché ou HTTP POST
Automatisation du navigateur Obligatoire - pas d'alternative sans tête Facultatif : peut utiliser des requêtes HTTP pures
Récupération d'erreur Réextraire les images en cas d'échec Demander à nouveau le jeton en cas d'échec
Résolution simultanée Limité : images liées à la session du navigateur Facile : les demandes de jetons sont sans état
Lignes de code (typiques) 40-60 lignes 15-25 lignes

Quand utiliser quel solveur

Scénario Approche recommandée
Prise de rendez-vous pour le visa BLS Utilisez method=bls avec l'extraction d'images
Tout site avec reCAPTCHA Utilisez method=userrecaptcha avec la clé de site
Site BLS avec reCAPTCHA intégré Vérifiez lequel protège l’action – les sites BLS utilisent parfois les deux
Captcha d'image inconnu Vérifiez d'abord s'il porte la marque BLS ; sinon, essayez les méthodes reCAPTCHA ou OCR

Dépannage

Problème Correction du BLS Correction de reCAPTCHA
Mauvaise réponse renvoyée Vérifiez que le texte des instructions correspond à ce que la page affiche Vérifiez que la clé du site et l'URL de la page sont correctes
Les images ne se chargent pas Ajoutez User-Agent et des cookies lors de la récupération des URL d'images Non applicable — aucune image à récupérer
Jeton rejeté Cliquez sur les index dans le bon ordre sur la page Injecter dans g-recaptcha-response ET exécuter le rappel
Résoudre trop lentement Réduisez le nombre d’images : n’envoyez que des images visibles Utiliser un proxy à proximité du site cible

FAQ

Qu’est-ce qui est le plus difficile à résoudre ?

BLS nécessite plus de travail d'intégration (extraction d'images, analyse d'instructions et clic basé sur un index), mais les images sont généralement plus claires et plus simples. reCAPTCHA est plus facile à intégrer (méthode des jetons) mais les défis de Google peuvent être plus complexes avec les vignettes dynamiques.

Puis-je utiliser la méthode du jeton reCAPTCHA pour BLS ?

Non. BLS n'est pas une implémentation de reCAPTCHA. Vous devez utiliser method=bls avec des images individuelles codées en base64 et le texte d'instruction.

Les deux utilisent-ils la technologie de Google ?

Non. BLS CAPTCHA est une implémentation personnalisée et propriétaire conçue pour les services de visa BLS International. reCAPTCHA est le produit de Google utilisé dans le monde sur des millions de sites Web.

Qu’est-ce qui est le plus rentable à résoudre à grande échelle ?

Les résolutions de jetons reCAPTCHA sont généralement plus rentables pour les opérations à volume élevé, car l'intégration est plus simple (pas de surcharge d'extraction d'image) et vous pouvez exécuter des requêtes sans état simultanées. La résolution BLS nécessite une session de navigateur pour chaque résolution.

Puis-je résoudre les deux types sur la même page ?

Oui. Certains sites BLS utilisent leur CAPTCHA personnalisé pour la vérification initiale et leur reCAPTCHA pour la soumission de formulaires. Détectez chaque type séparément et utilisez la méthode CaptchaAI appropriée pour chacun.


Guides associés

  • Comment résoudre BLS CAPTCHA étape par étape— Procédure pas à pas complète d'intégration BLS
  • Comment résoudre reCAPTCHA v2 à l'aide de l'API— tutoriel complet reCAPTCHA v2
  • Le défi de la grille reCAPTCHA expliqué– comment fonctionnent les défis de grille
  • Erreurs BLS Captcha et dépannage— Corrections d'erreurs spécifiques au BLS
Les commentaires sont désactivés pour cet article.