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