La résolution de BLS CAPTCHA présente des défis uniques car elle utilise une implémentation personnalisée. Voici les erreurs les plus courantes et leurs solutions.
Erreurs de soumission d'API
ERROR_BAD_PARAMETERS
Cause : Paramètres requis manquants (instructions ou images).
Correction :
# WRONG — missing instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "bls",
"image_base64_1": img1, "json": 1
})
# CORRECT — include instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "bls",
"instructions": "Select all images with a car",
"image_base64_1": img1, "json": 1
})
ERROR_WRONG_FILE_EXTENSION
Cause : Les données d'image ne sont pas en base64 valide ou sont dans un format non pris en charge.
Correction :
- Assurez-vous que les images sont codées en PNG ou JPEG en base64.
- Supprimez le préfixe
data:image/...;base64, - Vérifiez que la chaîne base64 n'est pas tronquée
import base64
# Strip the data URI prefix
src = img_element.get_attribute("src")
if src.startswith("data:image"):
b64 = src.split(",")[1]
else:
# Download and encode
img_data = requests.get(src).content
b64 = base64.b64encode(img_data).decode()
ERROR_CAPTCHA_UNSOLVABLE
Cause : Les images sont de trop mauvaise qualité, floues ou les instructions sont ambiguës.
Correction :
- Capturez des images en pleine résolution
- Assurez-vous que le texte des instructions est extrait correctement
- Réessayez : certains défis sont intrinsèquement plus difficiles
Erreurs d'extraction d'images
Les images se chargent dynamiquement
Problème : Les images ne sont pas dans le DOM lors du premier chargement de la page.
Correction : Attendez que le captcha s'affiche complètement :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Wait for captcha images to load
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".captcha-image img"))
)
Les images sont des toiles, pas des éléments img
Problème : Certaines implémentations BLS restituent des images sur des éléments <canvas>.
Correction : Extrayez les données du canevas en base64 :
canvas_elements = driver.find_elements(By.CSS_SELECTOR, ".captcha-canvas")
for i, canvas in enumerate(canvas_elements, 1):
b64 = driver.execute_script(
"return arguments[0].toDataURL('image/png').split(',')[1];",
canvas
)
payload[f"image_base64_{i}"] = b64
Images derrière l’anti-hotlinking
Problème : Les URL d'image renvoient 403 lorsqu'elles sont récupérées en dehors du navigateur.
Correction : Extrayez les images dans le contexte du navigateur :
# Get image data from within the browser
b64 = driver.execute_script("""
var img = arguments[0];
var canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
canvas.getContext('2d').drawImage(img, 0, 0);
return canvas.toDataURL('image/png').split(',')[1];
""", img_element)
Erreurs d'application de la solution
Mauvaises images sélectionnées
Cause : Incompatibilité dans l'ordre des images entre l'extraction et l'affichage.
Correction : Maintenez un ordre cohérent :
# Ensure images are indexed in display order
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
# The order of find_elements matches DOM order = display order
for i, img in enumerate(captcha_imgs, 1):
payload[f"image_base64_{i}"] = extract_base64(img)
Les indices de solution ne correspondent pas
Cause : CaptchaAI renvoie des indices de base 1, mais votre code utilise des indices de base 0.
Correction :
solution = result["request"] # e.g., "1,3,5"
indices = [int(i) for i in solution.split(",")]
# Convert to 0-based for array access
for idx in indices:
captcha_imgs[idx - 1].click() # 1-based → 0-based
La soumission du formulaire échoue après une sélection correcte
Cause : Des champs de formulaire ou des jetons supplémentaires sont manquants.
Correction : Vérifiez les champs masqués qui doivent être soumis avec le captcha :
# Look for hidden captcha tokens
hidden_fields = driver.find_elements(By.CSS_SELECTOR, "input[type='hidden']")
for field in hidden_fields:
name = field.get_attribute("name")
value = field.get_attribute("value")
print(f"Hidden field: {name}={value}")
Erreurs de délai d'attente
Le captcha expire avant la fin de la résolution
Problème : BLS CAPTCHA a une courte fenêtre de validité.
Correction :
- Extrayez les images et soumettez-les immédiatement à CaptchaAI
- N'extrayez pas d'images puis attendez avant de les soumettre
- Si la résolution prend plus de 60 secondes, le captcha a peut-être expiré : actualisez et réessayez.
Le sondage prend trop de temps
Correction : Assurez-vous que vous interrogez correctement :
# Standard polling pattern
for _ in range(30): # 30 attempts × 5 seconds = 150 seconds max
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"]
if result.get("request") == "ERROR_CAPTCHA_UNSOLVABLE":
# Don't keep polling — start over
raise Exception("Unsolvable")
Liste de contrôle de débogage
| Vérifier | Action |
|---|---|
| Instructions extraites ? | Imprimez et vérifiez le texte des instructions |
| Images valides ? | Enregistrer en base64 dans un fichier et ouvrir pour vérifier |
| Le nombre d'images est-il correct ? | Comparez le nombre d'images envoyées et affichées |
| L’ordre des images est-il correct ? | Vérifier que l'ordre DOM correspond à l'ordre d'affichage |
| Le préfixe Base64 supprimé ? | Supprimer data:image/...;base64, |
| Format de solution ? | Analyser les indices basés sur 1 séparés par des virgules |
| Conversion d'index ? | Soustraire 1 pour accéder au tableau basé sur 0 |
FAQ
Combien d’images dois-je envoyer à CaptchaAI ?
Envoyez toutes les images affichées dans le CAPTCHA, généralement 3 à 9. Utilisez image_base64_1 à image_base64_9.
Que se passe-t-il si l'enseignement est dans une langue autre que l'anglais ?
Envoyez l’instruction exactement telle qu’elle est affichée. CaptchaAI gère les instructions multilingues.
Puis-je précharger des images pour accélérer la résolution ?
Non. BLS génère des images uniques par session. Vous devez les extraire à nouveau pour chaque instance de captcha.
Et si BLS changeait son format CAPTCHA ?
Si le format change, le code d'extraction d'image devra peut-être être mis à jour. Les paramètres de l'API CaptchaAI (method=bls, instructions, images) resteront les mêmes.
Guides associés
- Comment résoudre BLS CAPTCHA étape par étape
- Comment fonctionne BLS CAPTCHA
- Référence des codes d'erreur CaptchaAI