BLS CAPTCHA est un défi personnalisé basé sur des images utilisé sur les systèmes de rendez-vous pour les visas BLS International. Il affiche plusieurs images et demande à l'utilisateur d'en sélectionner des spécifiques en fonction d'instructions textuelles – similaire à la grille reCAPTCHA mais avec des images distinctes et des instructions personnalisées.
Ce guide couvre l'extraction d'images, leur soumission à CaptchaAI et l'utilisation de la solution pour remplir les formulaires BLS.
Exigences
| Article | Valeur |
|---|---|
| Clé API CaptchaAI | Depuiscaptchaai.com |
| Images BLS CAPTCHA | Encodé en base64 à partir de la page |
| Texte d'instructions | Le texte indiquant quelles images sélectionner |
| Langue | Python 3.7+ ou Node.js 14+ |
Étape 1 : Extraire les images et les instructions de la page
BLS CAPTCHA affiche généralement 3 à 9 images avec une instruction textuelle telle que "Sélectionner toutes les images avec une voiture".
Utiliser du sélénium
from selenium import webdriver
from selenium.webdriver.common.by import By
import base64
import requests as req
driver = webdriver.Chrome()
driver.get("https://blsitalypakistan.com/appointment")
# Get instruction text
instruction = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction").text
print(f"Instruction: {instruction}")
# Get all captcha images as base64
images = {}
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
for i, img in enumerate(captcha_imgs, 1):
src = img.get_attribute("src")
if src.startswith("data:image"):
# Already base64
images[f"image_base64_{i}"] = src.split(",")[1]
else:
# Download and encode
img_data = req.get(src).content
images[f"image_base64_{i}"] = base64.b64encode(img_data).decode()
Utiliser le Marionnettiste
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({ headless: 'new' });
const page = await browser.newPage();
await page.goto('https://blsitalypakistan.com/appointment');
// Get instruction
const instruction = await page.$eval('.captcha-instruction', el => el.textContent);
// Get images as base64
const images = await page.$$eval('.captcha-image img', imgs =>
imgs.map((img, i) => ({
key: `image_base64_${i + 1}`,
value: img.src.startsWith('data:') ? img.src.split(',')[1] : null
}))
);
Étape 2 : Soumettre à CaptchaAI
Envoyez le texte d'instruction et toutes les images au solveur BLS.
Python
import requests
import time
API_KEY = "YOUR_API_KEY"
payload = {
"key": API_KEY,
"method": "bls",
"instructions": instruction,
"json": 1
}
# Add each image (up to 9)
for key, value in images.items():
payload[key] = value
response = requests.post("https://ocr.captchaai.com/in.php", data=payload)
data = response.json()
if data.get("status") != 1:
raise Exception(f"Submit error: {data.get('request')}")
task_id = data["request"]
print(f"Task submitted: {task_id}")
Noeud.js
const axios = require('axios');
const FormData = require('form-data');
async function submitBLS(instruction, images) {
const params = {
key: 'YOUR_API_KEY',
method: 'bls',
instructions: instruction,
json: 1,
...Object.fromEntries(images.map(img => [img.key, img.value]))
};
const { data } = await axios.post('https://ocr.captchaai.com/in.php', null, { params });
if (data.status !== 1) throw new Error(data.request);
return data.request;
}
Étape 3 : Sonder la solution
La solution renvoie les indices des images correctes.
Python
def get_bls_solution(task_id):
for _ in range(30):
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.get("status") == 1:
return result["request"] # e.g., "1,3,5" (image indices)
if result.get("request") != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result.get('request')}")
raise Exception("Timeout")
solution = get_bls_solution(task_id)
print(f"Select images: {solution}") # e.g., "1,3,5"
Étape 4 : Cliquez sur les bonnes images
Utilisez les index renvoyés pour cliquer sur les images correspondantes sur la page :
# Parse the solution indices
selected = [int(i) for i in solution.split(",")]
# Click each correct image
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
for idx in selected:
captcha_imgs[idx - 1].click() # Convert 1-based to 0-based
time.sleep(0.3) # Small delay between clicks
# Submit the form
driver.find_element(By.CSS_SELECTOR, ".captcha-submit").click()
Exemple Python complet
import requests
import time
import base64
from selenium import webdriver
from selenium.webdriver.common.by import By
API_KEY = "YOUR_API_KEY"
driver = webdriver.Chrome()
driver.get("https://blsitalypakistan.com/appointment")
# 1. Extract instruction and images
instruction = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction").text
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
payload = {"key": API_KEY, "method": "bls", "instructions": instruction, "json": 1}
for i, img in enumerate(captcha_imgs, 1):
src = img.get_attribute("src")
if src.startswith("data:image"):
payload[f"image_base64_{i}"] = src.split(",")[1]
# 2. Submit to CaptchaAI
resp = requests.post("https://ocr.captchaai.com/in.php", data=payload).json()
task_id = resp["request"]
# 3. Poll for solution
for _ in range(30):
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.get("status") == 1:
selected = [int(i) for i in result["request"].split(",")]
break
# 4. Click correct images and submit
for idx in selected:
captcha_imgs[idx - 1].click()
time.sleep(0.3)
driver.find_element(By.CSS_SELECTOR, ".captcha-submit").click()
print("CAPTCHA solved!")
driver.quit()
Dépannage
| Erreur | Parce que | Corriger |
|---|---|---|
ERROR_BAD_PARAMETERS |
Instructions ou images manquantes | Incluez à la fois l’instruction textuelle et au moins une image |
ERROR_CAPTCHA_UNSOLVABLE |
Images trop floues ou méconnaissables | Capturez des images de meilleure qualité ; s'assurer que l'encodage base64 est correct |
| Mauvaises images sélectionnées | Ordre des images incorrect | Assurez-vous que les images sont numérotées dans le bon ordre d’affichage |
| Solution rejetée | Images modifiées après extraction | Extrayez les images et soumettez-les immédiatement |
Exemple entièrement exécutable
Besoin d'un projet de travail complet avec configuration de l'environnement, interrogation, tentatives et gestion des erreurs ?
Voir l'exemple exécutable complet sur GitHub →
FAQ
Combien d’images BLS CAPTCHA affiche-t-il ?
Généralement 3 à 9 images. Le nombre varie selon la page et la session.
Dans quel format les images doivent-elles être ?
PNG ou JPEG encodé en base64. Supprimez le préfixe data:image/...;base64, avant l'envoi.
Combien de temps prend la résolution de BLS CAPTCHA ?
15 à 30 secondes généralement. Les défis de reconnaissance d’images prennent plus de temps que les CAPTCHA basés sur du texte.
Puis-je résoudre BLS CAPTCHA sans Sélénium ?
Oui, si vous pouvez extraire les images et les instructions via des requêtes HTTP. L'API CaptchaAI n'a besoin que des images base64 et du texte d'instructions.
Guides associés
- Comment fonctionne BLS CAPTCHA
- Erreurs BLS CAPTCHA et dépannage
- Comparaison des grilles BLS CAPTCHA et reCAPTCHA