استكشاف الأخطاء

أخطاء وإصلاحات Grid Image CAPTCHA الشائعة

يمكن أن يفشل حل اختبار CAPTCHA لصورة الشبكة بسبب جودة الصورة أو عدم تطابق التنسيق أو تطبيق الحل غير الصحيح. فيما يلي الأخطاء الأكثر شيوعًا وكيفية حلها.


أخطاء إرسال الصورة

ERROR_WRONG_FILE_EXTENSION

السبب: الملف الذي تم تحميله ليس بتنسيق صورة صالح.

الإصلاح:

  • استخدم تنسيق PNG أو JPEG فقط
  • تحقق من ترميز سلسلة base64 بشكل صحيح
  • قم بإزالة البادئة data:image/...;base64, قبل الإرسال
# WRONG — includes data URI prefix
body = "data:image/png;base64,iVBORw0KGgo..."

# CORRECT — raw base64 only
body = "iVBORw0KGgo..."

ERROR_TOO_BIG_CAPTCHA_FILESIZE

السبب: تجاوزت الصورة الحد الأقصى لحجم الملف (عادةً 600 كيلو بايت).

الإصلاح:

from PIL import Image
import io
import base64

# Resize if too large
img = Image.open("captcha.png")
if img.width > 600:
    ratio = 600 / img.width
    img = img.resize((600, int(img.height * ratio)), Image.LANCZOS)

buffer = io.BytesIO()
img.save(buffer, format="PNG")
b64 = base64.b64encode(buffer.getvalue()).decode()

ERROR_ZERO_CAPTCHA_FILESIZE

السبب: ملف فارغ أو فشل في استخراج الصورة.

الإصلاح:

  • تأكد من تحميل عنصر الصورة قبل استخراجه
  • تأكد من أن السمة src ليست فارغة
  • انتظر الصور المحملة كسولًا
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Wait for image to load
WebDriverWait(driver, 10).until(
    lambda d: d.find_element(By.CSS_SELECTOR, ".captcha img").get_attribute("complete") == "true"
)

حل الأخطاء

ERROR_CAPTCHA_UNSOLVABLE

السبب: الصورة ضبابية جدًا أو مشوهة أو لا يمكن التعرف على الكائنات.

الإصلاح:

  • التقط الصورة بدقة كاملة - لا تقم بتصغير حجمها
  • تأكد من عدم وجود تراكبات أو علامات مائية تحجب الشبكة
  • أعد المحاولة باستخدام كلمة التحقق الجديدة (بعض التحديات غامضة بطبيعتها)

تم تحديد الخلايا الخاطئة

السبب: انخفاض جودة الصورة أو التقاطها جزئيًا.

الإصلاح:

  • قم بالتقاط لقطة شاشة لعنصر captcha بالكامل، بما في ذلك الحدود
  • لا تقم بالقص بشكل محكم جدًا، بل قم بتضمين بضع وحدات بكسل من الهامش
  • يمكنك التحقق من ذلك عن طريق حفظ الصورة الملتقطة ومراجعتها يدويًا
# Take a proper element screenshot
captcha_el = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
captcha_el.screenshot("debug_captcha.png")

# Open and check manually
from PIL import Image
Image.open("debug_captcha.png").show()

أخطاء تطبيق الحل

أخطاء الفهرس خارج تلو الآخر

السبب: عدم التطابق بين استجابة واجهة برمجة التطبيقات المستندة إلى 1 وفهرسة المصفوفة المستندة إلى 0.

# API returns "1,3,5" (1-based)
solution = "1,3,5"
indices = [int(i) for i in solution.split(",")]

# DON'T: use directly as array index
# cells[1], cells[3], cells[5]  ← WRONG (off by one)

# DO: convert to 0-based
for idx in indices:
    cells[idx - 1].click()  # 1→0, 3→2, 5→4

الخلايا لا تستجيب للنقرات

السبب: هدف النقر خاطئ — التراكب أو iframe أو Shadow DOM.

الإصلاح:

# Check if captcha is in an iframe
iframes = driver.find_elements(By.TAG_NAME, "iframe")
for iframe in iframes:
    if "captcha" in iframe.get_attribute("src").lower():
        driver.switch_to.frame(iframe)
        break

# Now find and click cells
cells = driver.find_elements(By.CSS_SELECTOR, ".grid-cell")

الشبكة الديناميكية — تتغير البلاطات بعد النقر

السبب: تحل الشبكات الديناميكية بنمط reCAPTCHA محل المربعات.

الإصلاح: استخدم طريقة الرمز المميز بدلاً من طريقة الصورة لـ reCAPTCHA:

# Token method handles dynamic grids automatically
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com",
    "json": 1
})

أخطاء المهلة

تنتهي صلاحية كلمة التحقق قبل إرجاع الحل

السبب: عادةً ما تنتهي صلاحية اختبارات CAPTCHA الخاصة بالشبكة خلال 2-3 دقائق.

الإصلاح:

  • إرسال الصورة مباشرة بعد التقاطها
  • إذا استغرق الحل أكثر من 60 ثانية، قم بالتحديث ثم أعد المحاولة

حلقات CAPCHA_NOT_READY إلى أجل غير مسمى

السبب: ربما فشلت المهمة بصمت.

الإصلاح: تعيين الحد الأقصى لعدد مرات إعادة المحاولة ومعالجة حالات الفشل:

for attempt 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"]
    if result.get("request") not in ["CAPCHA_NOT_READY"]:
        break  # Actual error, stop polling

raise Exception("Grid captcha solve failed — refresh and retry")

قائمة التحقق من التصحيح

تحقق العمل
تنسيق الصورة؟ PNG أو JPEG، مشفرة بشكل صحيح
حجم الصورة؟ أقل من 600 كيلو بايت
القبض على الشبكة الكاملة؟ تضمين الشبكة بأكملها مع الهوامش
جودة الصورة؟ واضح، غير واضح أو مصغر
صيغة الحل؟ تحليل المؤشرات المفصولة بفواصل بشكل صحيح
قاعدة الفهرس؟ تحويل المستند إلى 1 إلى 0 للمصفوفات
سياق الإطار المتكامل؟ قم بالتبديل إلى captcha iframe إذا كان موجودًا
انتهت صلاحية كلمة التحقق؟ أرسل مباشرة بعد الالتقاط

الأسئلة الشائعة

ما هو تنسيق الصورة الذي يعطي أفضل النتائج؟

تنتج PNG أفضل النتائج لأنها خالية من الخسارة. يعمل JPEG ولكن الضغط الشديد يمكن أن يؤدي إلى تشويش حدود الخلايا وتقليل الدقة.

هل يجب أن أقوم بتضمين نص التعليمات مع صور شبكية؟

بالنسبة إلى method=post مع recaptcha=1، لا تكون التعليمات مطلوبة - حيث يتعرف المحلل على الكائنات بصريًا. بالنسبة إلى method=bls، قم دائمًا بتضمين نص التعليمات.

هل يمكنني حل اختبارات CAPTCHA متعددة للشبكة بالتوازي؟

نعم. كل حل مستقل. إرسال مهام متعددة واستطلاع كل واحدة على حدة.

ماذا لو كانت الشبكة ذات أبعاد غير قياسية؟

يقوم CaptchaAI بتحليل الصورة كما هي. يتم التعامل مع الشبكات غير القياسية (على سبيل المثال، 5 × 3، 2 × 4) بناءً على التحليل البصري بدلاً من افتراضات الشبكة الثابتة.


أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.