يواجه حل BLS CAPTCHA تحديات فريدة لأنه يستخدم تطبيقًا مخصصًا. فيما يلي الأخطاء الأكثر شيوعًا وحلولها.
أخطاء إرسال واجهة برمجة التطبيقات
ERROR_BAD_PARAMETERS
السبب: المعلمات المطلوبة مفقودة — إما تعليمات أو صور.
الإصلاح:
# 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
السبب: بيانات الصورة غير صالحة لـ base64 أو أنها بتنسيق غير مدعوم.
الإصلاح:
- تأكد من أن الصور بتنسيق PNG أو JPEG بترميز base64
- قم بإزالة البادئة
data:image/...;base64, - تحقق من عدم اقتطاع سلسلة base64
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
السبب: جودة الصور منخفضة جدًا أو غير واضحة أو أن التعليمات غامضة.
الإصلاح:
- التقاط الصور بدقة كاملة
- تأكد من استخراج نص التعليمات بشكل صحيح
- إعادة المحاولة - بعض التحديات تكون أكثر صعوبة بطبيعتها
أخطاء استخراج الصورة
يتم تحميل الصور ديناميكيًا
المشكلة: الصور غير موجودة في DOM عند تحميل الصفحة لأول مرة.
الإصلاح: انتظر حتى يتم عرض رمز التحقق بالكامل:
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"))
)
الصور عبارة عن لوحات قماشية وليست عناصر img
المشكلة: تعرض بعض تطبيقات BLS الصور على عناصر <canvas>.
الإصلاح: استخراج بيانات اللوحة القماشية كـ 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
الصور وراء مكافحة الارتباط السريع
المشكلة: تعرض عناوين URL للصورة 403 عند جلبها من خارج المتصفح.
الإصلاح: استخراج الصور داخل سياق المتصفح:
# 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)
أخطاء تطبيق الحل
تم اختيار صور خاطئة
السبب: عدم تطابق ترتيب الصور بين الاستخراج والعرض.
الإصلاح: الحفاظ على الترتيب المتسق:
# 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)
مؤشرات الحل غير متطابقة
السبب: تقوم CaptchaAI بإرجاع مؤشرات تعتمد على 1، لكن التعليمات البرمجية الخاصة بك تستخدم مؤشرات تعتمد على 0.
الإصلاح:
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
فشل إرسال النموذج بعد الاختيار الصحيح
السبب: حقول النموذج الإضافية أو الرموز المميزة مفقودة.
الإصلاح: التحقق من الحقول المخفية التي يجب إرسالها بجانب رمز التحقق:
# 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}")
أخطاء المهلة
تنتهي صلاحية كلمة التحقق قبل اكتمال الحل
المشكلة: يحتوي BLS CAPTCHA على نافذة صلاحية قصيرة.
الإصلاح:
- قم باستخراج الصور وإرسالها إلى CaptchaAI على الفور
- لا تقم باستخراج الصور ثم انتظر قبل الإرسال
- إذا استغرق الحل أكثر من 60 ثانية، فقد تكون كلمة التحقق قد انتهت صلاحيتها، قم بالتحديث ثم أعد المحاولة
يستغرق الاقتراع وقتا طويلا
الإصلاح: تأكد من أنك تقوم بالتصويت بشكل صحيح:
# 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")
قائمة التحقق من التصحيح
| تحقق | العمل |
|---|---|
| التعليمات المستخرجة؟ | طباعة والتحقق من نص التعليمات |
| الصور صالحة؟ | احفظ base64 في الملف وافتحه للتحقق |
| عدد الصور صحيح؟ | قارن بين عدد الصور المرسلة والمعروضة |
| ترتيب الصور صحيح؟ | تحقق من تطابق ترتيب DOM مع ترتيب العرض |
| تجريد البادئة Base64؟ | إزالة data:image/...;base64, |
| صيغة الحل؟ | تحليل المؤشرات المستندة إلى 1 مفصولة بفواصل |
| تحويل المؤشر؟ | اطرح 1 للوصول إلى الصفيف المستند إلى 0 |
الأسئلة الشائعة
كم عدد الصور التي يجب أن أرسلها إلى CaptchaAI؟
أرسل كافة الصور المعروضة في اختبار CAPTCHA، عادةً من 3 إلى 9. استخدم image_base64_1 من خلال image_base64_9.
ماذا لو كان التدريس بلغة غير الإنجليزية؟
أرسل التعليمات تمامًا كما هو معروض. يتعامل CaptchaAI مع التعليمات متعددة اللغات.
هل يمكنني تحميل الصور مسبقا لتسريع الحل؟
لا، يقوم BLS بإنشاء صور فريدة لكل جلسة. يجب عليك استخراجها جديدة لكل مثيل من رموز التحقق.
ماذا لو قام BLS بتغيير تنسيق CAPTCHA الخاص به؟
إذا تغير التنسيق، فقد يحتاج كود استخراج الصورة إلى التحديث. ستظل معلمات CaptchaAI API (method=bls والتعليمات والصور) كما هي.
النقاشات (0)
شارك في النقاش
سجّل الدخول لمشاركة رأيك.
تسجيل الدخوللا توجد تعليقات بعد.