تعرض BLS CAPTCHAs شبكات الصور حيث يجب على المستخدمين تحديد الصور أو إعادة ترتيبها. يغطي هذا الدليل تخطيطات الشبكة وتنسيقات الاستجابة وكيفية إرسال الحلول بشكل صحيح.
أنواع تحديات شبكة BLS
ترتيب الصور
يجب على المستخدم ترتيب الصور بتسلسل محدد (على سبيل المثال، أرقام تصاعدية، ترتيب أبجدي).
اختيار الصورة
يجب على المستخدم النقر على صور محددة تطابق الوصف (على سبيل المثال، "تحديد جميع الصور التي تحتوي على نص").
مطابقة النمط
يجب على المستخدم تحديد الصور التي تطابق النموذج أو العينة المقدمة.
رسم خرائط تخطيط الشبكة
# grid_mapping.py
# BLS grids typically use 3x3 or 4x4 layouts
# Each cell maps to an index:
# 3x3 grid:
# [0] [1] [2]
# [3] [4] [5]
# [6] [7] [8]
# 4x4 grid:
# [0] [1] [2] [3]
# [4] [5] [6] [7]
# [8] [9] [10] [11]
# [12] [13] [14] [15]
def grid_position(index, cols=3):
"""Convert flat index to row, column."""
return index // cols, index % cols
def index_from_position(row, col, cols=3):
"""Convert row, column to flat index."""
return row * cols + col
# Example: For a 3x3 grid, position (1, 2) = index 5
print(grid_position(5, cols=3)) # (1, 2)
print(index_from_position(1, 2)) # 5
حل BLS Grid CAPTCHAs
# solve_bls_grid.py
import requests
import time
import os
import json
def solve_bls_grid(sitekey, pageurl, instructions=None):
"""Solve a BLS grid CAPTCHA and get response indices."""
api_key = os.environ["CAPTCHAAI_API_KEY"]
payload = {
"key": api_key,
"method": "bls",
"sitekey": sitekey,
"pageurl": pageurl,
"json": 1,
}
if instructions:
payload["instructions"] = instructions
resp = requests.post(
"https://ocr.captchaai.com/in.php",
data=payload,
timeout=30,
)
result = resp.json()
if result.get("status") != 1:
raise RuntimeError(f"Submit failed: {result.get('request')}")
task_id = result["request"]
time.sleep(10)
for _ in range(30):
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key,
"action": "get",
"id": task_id,
"json": 1,
}, timeout=15)
data = resp.json()
if data.get("status") == 1:
return data["request"]
if data["request"] != "CAPCHA_NOT_READY":
raise RuntimeError(data["request"])
time.sleep(5)
raise TimeoutError("BLS grid solve timeout")
تحليل استجابات الشبكة
# parse_response.py
import json
def parse_grid_response(solution):
"""Parse CaptchaAI BLS response into actionable grid data."""
# Solution may be JSON or comma-separated indices
if isinstance(solution, str):
try:
parsed = json.loads(solution)
return parsed
except json.JSONDecodeError:
pass
# Try comma-separated indices
if "," in solution:
return [int(x.strip()) for x in solution.split(",")]
# Single value
return [solution]
return solution
def format_for_submission(indices, grid_size=9):
"""Format indices for form submission."""
# Some sites expect a bitmask
bitmask = ["0"] * grid_size
for idx in indices:
if isinstance(idx, int) and 0 <= idx < grid_size:
bitmask[idx] = "1"
return {
"indices": indices,
"bitmask": "".join(bitmask),
"count": len(indices),
}
حقن حلول الشبكة مع السيلينيوم
# inject_grid.py
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
def click_grid_cells(driver, indices):
"""Click specific grid cells based on solution indices."""
wait = WebDriverWait(driver, 10)
# Find all grid cells
cells = wait.until(
EC.presence_of_all_elements_located(
(By.CSS_SELECTOR, ".captcha-grid .cell, .bls-grid img, .grid-item")
)
)
for idx in indices:
if isinstance(idx, int) and idx < len(cells):
cells[idx].click()
time.sleep(0.3) # Brief delay between clicks
def set_order_sequence(driver, ordered_indices):
"""Click grid cells in the correct order for ordering challenges."""
wait = WebDriverWait(driver, 10)
cells = wait.until(
EC.presence_of_all_elements_located(
(By.CSS_SELECTOR, ".captcha-grid .cell, .bls-grid img")
)
)
for idx in ordered_indices:
if isinstance(idx, int) and idx < len(cells):
cells[idx].click()
time.sleep(0.5) # Ordering needs pauses between clicks
def inject_hidden_response(driver, solution_value):
"""Set the solution in a hidden input field."""
driver.execute_script("""
var inputs = document.querySelectorAll(
'input[name*="captcha"], input[name*="response"], #captcha-answer'
);
for (var i = 0; i < inputs.length; i++) {
inputs[i].value = arguments[0];
}
""", str(solution_value))
استكمال تدفق شبكة BLS
# full_flow.py
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def handle_bls_grid(driver, pageurl):
"""Complete BLS grid CAPTCHA handling."""
wait = WebDriverWait(driver, 15)
# Wait for CAPTCHA to load
captcha = wait.until(
EC.presence_of_element_located(
(By.CSS_SELECTOR, "[data-sitekey], .bls-captcha")
)
)
sitekey = captcha.get_attribute("data-sitekey")
# Get instructions
instructions = None
try:
inst = driver.find_element(By.CSS_SELECTOR, ".captcha-instructions")
instructions = inst.text.strip()
except Exception:
pass
# Solve via CaptchaAI
solution = solve_bls_grid(sitekey, pageurl, instructions)
parsed = parse_grid_response(solution)
# Determine response method
grid_cells = driver.find_elements(
By.CSS_SELECTOR, ".captcha-grid .cell, .bls-grid img"
)
if grid_cells:
# Click-based response
if isinstance(parsed, list) and all(isinstance(x, int) for x in parsed):
click_grid_cells(driver, parsed)
else:
inject_hidden_response(driver, solution)
else:
# Hidden input response
inject_hidden_response(driver, solution)
# Submit
submit = driver.find_element(
By.CSS_SELECTOR, "button[type='submit'], .submit-btn, #verify"
)
submit.click()
return True
استكشاف الأخطاء وإصلاحها
| المشكلة | السبب | الإجراء |
|---|---|---|
| النقرات على الخلايا الخاطئة | عدم تطابق محدد خلية الشبكة | افحص شبكة HTML وقم بتحديث محددات CSS |
| تم رفض الطلب | النقر بسرعة كبيرة | أضف تأخيرًا قدره 300-500 مللي ثانية بين النقرات |
| تنسيق الحل غير متطابق | الموقع يتوقع قناعًا نقطيًا، ويحتوي على مؤشرات | استخدم format_for_submission() للتحويل |
| الشبكة غير محملة بالكامل | يتم تحميل الصور ببطء | انتظر حتى يتم تحميل جميع صور الشبكة قبل الحل |
الأسئلة الشائعة
كيف يعرف CaptchaAI تخطيط الشبكة؟
يتلقى CaptchaAI تحدي CAPTCHA من خوادم BLS ويحله عن بعد. أنت تقوم بتوفير مفتاح الموقع وعنوان URL للصفحة؛ تتعامل واجهة برمجة التطبيقات (API) مع تحليل الشبكة.
ماذا لو تغيرت الشبكة بعد التقديم؟
تُظهر بعض نماذج BLS تحديًا ثانيًا بعد اجتياز التحدي الأول. يمكنك التعامل مع هذا عن طريق التحقق من وجود عنصر CAPTCHA جديد بعد الإرسال.
هل يمكنني إعادة استخدام حل شبكة BLS؟
لا، كل حل مرتبط بجلسة تحدي محددة. حل دائما طازجة.
أدلة ذات صلة
- التعامل مع تحديات شبكة BLS -ابدأ بـ CaptchaAI.*
النقاشات (0)
شارك في النقاش
سجّل الدخول لمشاركة رأيك.
تسجيل الدخوللا توجد تعليقات بعد.