تقدم BLS CAPTCHAs شبكة 3 × 3 من الصور مع رمز تعليمات رقمي. يجب على المستخدم تحديد الخلايا التي تطابق التعليمات. CaptchaAI يحل مشاكل BLS CAPTCHA بدقة عالٍ - يغطي هذا الدليل كيفية استخراج الشبكة، وقراءة رمز التعليمات، وإرسال كل شيء إلى واجهة برمجة التطبيقات.
كيف تعمل BLS CAPTCHA
يعرض BLS CAPTCHA:
- شبكة 3×3 تحتوي على 9 خلايا صور
- رمز تعليمات رقمي (على سبيل المثال، 664، 123، 546) يحدد الخلايا المطلوب تحديدها
- يتم ترقيم الخلايا من اليسار إلى اليمين ومن الأعلى إلى الأسفل:
1 2 3
4 5 6
7 8 9
يخبر رمز التعليمات الحلال بالنمط الذي يجب البحث عنه. الاستجابة عبارة عن مجموعة من مؤشرات الخلايا (1-9) المتطابقة.
الخطوة 1: استخراج صور الشبكة ورمز التعليمات
بايثون (السيلينيوم)
import base64
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://example.com/bls-protected-page")
# Find the grid container
grid_cells = driver.find_elements(By.CSS_SELECTOR, ".captcha-grid img")
images = []
for cell in grid_cells:
src = cell.get_attribute("src")
if src.startswith("data:image"):
images.append(src)
else:
# Download and convert to base64
import requests
img_data = requests.get(src).content
b64 = base64.b64encode(img_data).decode()
images.append(f"data:image/png;base64,{b64}")
# Extract the instruction code
instruction_el = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction")
instruction_code = instruction_el.text.strip()
# e.g., "664" or parsed from "Select all boxes with number 664"
import re
code_match = re.search(r'(\d{3,})', instruction_code)
instruction = code_match.group(1) if code_match else instruction_code
print(f"Instruction: {instruction}")
print(f"Images extracted: {len(images)}")
JavaScript (Puppeteer)
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com/bls-protected-page');
// Extract grid images as base64
const images = await page.evaluate(() => {
const cells = document.querySelectorAll('.captcha-grid img');
return Array.from(cells).map(img => {
const canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
canvas.getContext('2d').drawImage(img, 0, 0);
return canvas.toDataURL('image/png');
});
});
// Extract instruction code
const instruction = await page.evaluate(() => {
const el = document.querySelector('.captcha-instruction');
const match = el.textContent.match(/(\d{3,})/);
return match ? match[1] : el.textContent.trim();
});
console.log(`Instruction: ${instruction}, Images: ${images.length}`);
الخطوة 2: أرسل إلى CaptchaAI
يتطلب حل BLS method=bls، ورمز instructions، وجميع الصور التسعة مثل image_base64_1 حتى image_base64_9.
بايثون
import requests
import time
import json
API_KEY = "YOUR_API_KEY"
# Prepare submission data
data = {
"key": API_KEY,
"method": "bls",
"instructions": instruction,
"json": "1",
}
# Add all 9 images
files = {}
for i, img in enumerate(images):
files[f"image_base64_{i+1}"] = (None, img)
# Submit
resp = requests.post(
"https://ocr.captchaai.com/in.php",
data=data,
files=files
).json()
if resp["status"] != 1:
raise Exception(f"Submit error: {resp['request']}")
task_id = resp["request"]
print(f"Task ID: {task_id}")
# Poll for result
for _ in range(20):
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["status"] == 1:
solution = json.loads(result["request"])
print(f"Selected cells: {solution}") # e.g., [1, 4, 7, 8]
break
if result["request"] != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result['request']}")
JavaScript
const axios = require('axios');
const FormData = require('form-data');
const form = new FormData();
form.append('key', 'YOUR_API_KEY');
form.append('method', 'bls');
form.append('instructions', instruction);
form.append('json', '1');
images.forEach((img, i) => {
form.append(`image_base64_${i + 1}`, img);
});
const submit = await axios.post('https://ocr.captchaai.com/in.php', form, {
headers: form.getHeaders(),
});
const taskId = submit.data.request;
// Poll
let solution = null;
for (let i = 0; i < 20; i++) {
await new Promise(r => setTimeout(r, 5000));
const poll = await axios.get('https://ocr.captchaai.com/res.php', {
params: { key: 'YOUR_API_KEY', action: 'get', id: taskId, json: 1 }
});
if (poll.data.status === 1) {
solution = JSON.parse(poll.data.request);
break;
}
}
console.log('Selected cells:', solution); // e.g., [2, 4, 7]
الخطوة 3: انقر فوق الخلايا التي تم حلها
# Selenium — click the cells returned by CaptchaAI
grid_cells = driver.find_elements(By.CSS_SELECTOR, ".captcha-grid .cell")
for cell_index in solution:
# cell_index is 1-based
grid_cells[cell_index - 1].click()
# Submit the form
submit_btn = driver.find_element(By.CSS_SELECTOR, ".captcha-submit")
submit_btn.click()
// Puppeteer
const cells = await page.$$('.captcha-grid .cell');
for (const idx of solution) {
await cells[idx - 1].click();
}
await page.click('.captcha-submit');
سير العمل الكامل
def solve_bls_captcha(driver, api_key):
"""Extract, solve, and submit a BLS CAPTCHA."""
import base64, requests, time, json, re
# 1. Extract images
grid_cells = driver.find_elements(By.CSS_SELECTOR, ".captcha-grid img")
images = []
for cell in grid_cells:
src = cell.get_attribute("src")
if src.startswith("data:image"):
images.append(src)
else:
img_data = requests.get(src).content
b64 = base64.b64encode(img_data).decode()
images.append(f"data:image/png;base64,{b64}")
# 2. Extract instruction
el = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction")
match = re.search(r'(\d{3,})', el.text)
instruction = match.group(1)
# 3. Submit to CaptchaAI
data = {"key": api_key, "method": "bls", "instructions": instruction, "json": "1"}
files = {f"image_base64_{i+1}": (None, img) for i, img in enumerate(images)}
resp = requests.post("https://ocr.captchaai.com/in.php", data=data, files=files).json()
task_id = resp["request"]
# 4. Poll
for _ in range(20):
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["status"] == 1:
solution = json.loads(result["request"])
break
# 5. Click cells
clickable = driver.find_elements(By.CSS_SELECTOR, ".captcha-grid .cell")
for idx in solution:
clickable[idx - 1].click()
return solution
استكشاف الأخطاء وإصلاحها
| مشكلة | السبب | إصلاح |
|---|---|---|
ERROR_BAD_PARAMETERS |
الصور المفقودة أو لا توجد تعليمات | تأكد من أن جميع الصور التسعة هي معرفات URI صالحة لبيانات base64 |
| تم تحديد خلايا خاطئة | تعيين الخلية إلى الفهرس غير صحيح | تحقق من ترقيم الخلايا من 1 إلى 9 من اليسار إلى اليمين، ومن أعلى إلى أسفل |
| لا يتم تحميل الصور | تقييد عبر الأصل | قم بتنزيل الصور من جانب الخادم وتحويلها إلى base64 |
| رمز تعليمات فارغ | التعليمات مخفية في الصورة | قم باستخراج نص التعليمات أو التعرف الضوئي على الحروف (OCR) على صورة التعليمات |
الأسئلة الشائعة
ماذا يعني رمز تعليمات BLS؟
يخبر رمز التعليمات (على سبيل المثال، "664") اختبار CAPTCHA بالخلايا التي تحتوي على محتوى مطابق. يقوم CaptchaAI بتحليله، ولا تحتاج إلى تفسير الكود بنفسك.
ما مدى دقة CaptchaAI لـ BLS؟
تُسجّل CaptchaAI معدل دقة عالٍ جداً لـ BLS CAPTCHA في ظروف الاستخدام الاعتيادية.
قم بحل مسائل BLS CAPTCHA باستخدام CaptchaAI - بدقة عالٍ
احصل على مفتاح API الخاص بك علىcaptchaai.com.
النقاشات (0)
شارك في النقاش
سجّل الدخول لمشاركة رأيك.
تسجيل الدخوللا توجد تعليقات بعد.