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

أخطاء وإصلاحات GeeTest v3 الشائعة

تقع معظم حالات فشل GeeTest v3 في واحدة من ثلاث مجموعات: أخطاء مرحلة الطلب (التقديم إلى واجهة برمجة التطبيقات)، وأخطاء مرحلة النتيجة (الاقتراع على الإجابة)، وفشل التحقق من صحة الصفحة المستهدفة (ترجع واجهة برمجة التطبيقات قيمًا ولكن الصفحة لا تزال ترفضها). أكبر مشكلة خاصة بـ GeeTest هي نفسها دائمًا تقريبًا: ** قيمة challenge التي لا معنى لها **.

CaptchaAIمستندات GeeTest v3 APIصريحة: يجب أن تحصل على قيمة challenge جديدة لكل طلب حل. بمجرد تحميل اختبار التحقق على الصفحة، يصبح التحدي القديم غير صالح. وهذا يعني أن تكامل GeeTest قد يفشل حتى عندما يبدو الطلب صحيحًا في الغالب.

يستعرض هذا الدليل جميع أنماط الفشل الشائعة وأسرع حل لكل منها.


فشل GeeTest رقم 1: challenge الذي لا معنى له

إذا كان هناك شيء واحد يجب التحقق منه أولاً، فهو تحدي النضارة.

يتطلب GeeTest v3 معلمتين رئيسيتين:

  • gt — مفتاح الموقع العام (ثابت، لا يتغير)
  • challenge — مفتاح التحدي الديناميكي (يتغير عند كل تحميل للصفحة)

لماذا يكسر

يتم إنشاء قيمة challenge عند تهيئة عنصر واجهة المستخدم GeeTest على الصفحة. إذا قمت بالتقاطه مرة واحدة وإعادة استخدامه عبر طلبات حل متعددة، فإن كل طلب بعد الطلب الأول سوف إما:

  • سيتم رفضه بواسطة واجهة برمجة التطبيقات (API) في وقت التقديم، أو
  • إنتاج نتيجة ترفضها الصفحة المستهدفة نظرًا لانتهاء صلاحية التحدي

كيفية اصلاحها

قبل كل طلب حل، افحص طلبات الشبكة الخاصة بالصفحة للعثور على استدعاء واجهة برمجة التطبيقات (API) الذي يُرجع challenge جديدًا. أعد تشغيل هذا الطلب للحصول على قيمة جديدة، ثم أرسله على الفور إلى CaptchaAI.

# Pseudocode: fetch a fresh challenge before each solve
import requests

def get_fresh_challenge(target_url):
    """Hit the GeeTest init endpoint to get a new challenge."""
    resp = requests.get(f"{target_url}/geetest/register", timeout=10)
    data = resp.json()
    return data["challenge"], data["gt"]

challenge, gt = get_fresh_challenge("https://example.com")
# Now submit to CaptchaAI immediately — do not delay

القاعدة الأساسية: إذا كان الوقت بين التقاط challenge وإرسال طلب الحل أكثر من بضع ثوانٍ، فقم بتحديثه.


أخطاء مرحلة الطلب

تحدث حالات الفشل هذه عند إرسال المهمة إلى https://ocr.captchaai.com/in.php.

ERROR_WRONG_USER_KEY

السبب: تنسيق مفتاح API غير صحيح (يجب أن يكون 32 حرفًا).

الإصلاح: التحقق من المفتاح منcaptchaai.com/api.php. لا تقم بإضافة أحرف إضافية أو مسافة بيضاء.

ERROR_KEY_DOES_NOT_EXIST

السبب: تم تنسيق مفتاح API بشكل صحيح ولكنه لا يتطابق مع أي حساب نشط.

الإصلاح: قم بتسجيل الدخول إلى لوحة معلومات CaptchaAI وتأكد من أن مفتاحك نشط.

ERROR_ZERO_BALANCE

السبب: لا توجد مواضيع مجانية متاحة في خطتك الحالية.

الإصلاح: انتظر حتى يتم تحرير سلاسل الرسائل، أو تقليل التزامن، أو ترقية خطتك.

ERROR_PAGEURL

السبب: المعلمة pageurl مفقودة من الطلب.

الإصلاح: أضف عنوان URL الكامل للصفحة التي يتم تحميل أداة GeeTest فيها. مثال:

pageurl=https://example.com/login

ERROR_BAD_PARAMETERS

السبب: واحد أو أكثر من الحقول المطلوبة مفقودة أو مشوهة. بالنسبة لـ GeeTest، المعلمات المطلوبة هي:

المعلمة النوع مطلوب الوصف
key سلسلة نعم مفتاح CaptchaAI API الخاص بك
method سلسلة نعم يجب أن يكون geetest
gt سلسلة نعم مفتاح الموقع العام الثابت
challenge سلسلة نعم مفتاح التحدي الديناميكي (يجب أن يكون جديدًا)
pageurl سلسلة نعم عنوان URL للصفحة الكاملة

الإصلاح: تأكد من وجود كل من gt وchallenge وpageurl وتنسيقها بشكل صحيح.

استجابات HTML أو 500/502

السبب: خطأ عابر من جانب الخادم — وليس مشكلة في المعلمة.

الإصلاح: انتظر من 5 إلى 10 ثوانٍ ثم أعد محاولة الطلب.


أخطاء مرحلة النتيجة

تحدث حالات الفشل هذه عند الاستقصاء https://ocr.captchaai.com/res.php.

CAPCHA_NOT_READY

هذا ليس خطأ. إنه يعني أن اختبار التحقق لا يزال قيد الحل. يستغرق حل GeeTest v3 في CaptchaAI عادةً أقل من 12 ثانية بمعدل نجاح عالٍ.

الإصلاح: انتظر 5 ثوانٍ وقم بالاستطلاع مرة أخرى. لا تعامل هذا على أنه فشل.

ERROR_WRONG_ID_FORMAT

السبب: تنسيق معرف captcha غير صحيح — يجب أن تكون المعرفات رقمية فقط.

الإصلاح: تأكد من أنك تستخدم المعرف الدقيق الذي تم إرجاعه بواسطة in.php، دون تعديل.

ERROR_WRONG_CAPTCHA_ID

السبب: المعرف لا يتطابق مع أي مهمة تم إرسالها.

الإصلاح: تأكد من أنك تستخدم المعرف الصحيح من رد الإرسال. إذا قمت بإرسال مهام متعددة، فتأكد من أنك تقوم باستقصاء المهمة الصحيحة.

ERROR_EMPTY_ACTION

السبب: معلمة action مفقودة أو فارغة في طلب الاستقصاء الخاص بك.

الإصلاح: تضمين action=get في كل طلب استطلاع:

https://ocr.captchaai.com/res.php?key=YOUR_KEY&action=get&id=CAPTCHA_ID

ERROR_CAPTCHA_UNSOLVABLE

السبب: تعذر حل التحدي — ربما بسبب قيمة challenge القديمة أو متغير GeeTest غير المدعوم.

الإصلاح: قم بتحديث قيمة challenge ثم أعد المحاولة.

ERROR_INTERNAL_SERVER_ERROR

السبب: مشكلة من جانب الخادم في CaptchaAI.

الإصلاح: انتظر 10 ثوانٍ ثم أعد المحاولة.


فشل التحقق من صحة الصفحة المستهدفة

هذه هي أصعب حالات الفشل في التصحيح لأن CaptchaAI API ترجع نتيجة صالحة، لكن الصفحة المستهدفة لا تزال ترفضها.

عندما ينجح حل GeeTest v3، تقوم واجهة برمجة التطبيقات (API) بإرجاع ثلاث قيم:

{
  "challenge": "1a2b3456cd67890e12345fab678901c2de",
  "validate": "09fe8d7c6ba54f32e1dcb0a9fedc8765",
  "seccode": "12fe3d4c56789ba01f2e345d6789c012|jordan"
}

ويجب إرسالها إلى الصفحة المستهدفة على النحو التالي:

حقل استجابة واجهة برمجة التطبيقات حقل الصفحة المستهدفة
challenge geetest_challenge
validate geetest_validate
seccode geetest_seccode

الفشل 1: تعيين حقل خاطئ

العَرَض: تعرض واجهة برمجة التطبيقات قيمًا، لكن الصفحة المستهدفة ترفضها على الفور.

السبب: تم إدراج القيم التي تم إرجاعها في حقول خاطئة أو في مسار طلب خاطئ.

الإصلاح: افحص حركة مرور الشبكة من خلال حل GeeTest اليدوي على الصفحة المستهدفة. ابحث عن طلب POST الذي يرسل نتيجة GeeTest ويطابق أسماء الحقول الخاصة بك تمامًا.

الفشل 2: استخدام challenge القديم في المنبع

العَرَض: تعرض واجهة برمجة التطبيقات قيمًا، ولكن تشير الصفحة إلى أن الاختبار منتهي الصلاحية أو غير صالح.

السبب: تم التقاط قيمة challenge في وقت مبكر جدًا أو إعادة استخدامها.

الإصلاح: قم بإحضار challenge جديد مباشرة قبل كل طلب حل. لا تقم بتخزينه مؤقتًا أو إعادة استخدامه.

الفشل 3: سياق الصفحة الخاطئ

العَرَض: فشل التحقق من الصحة حتى مع وجود مدخلات جديدة.

السبب: لا يتطابق pageurl الذي تم إرساله إلى CaptchaAI مع الصفحة الفعلية التي تم تحميل عنصر واجهة المستخدم GeeTest فيها.

الإصلاح: استخدم عنوان URL الدقيق، بما في ذلك البروتوكول والمسار. إذا تم تحميل عنصر واجهة المستخدم عبر AJAX على مسار مختلف، فاستخدم عنوان URL الخاص بهذا المسار.

الفشل 4: عدم تطابق بنية الطلب

العَرَض: الحقول صحيحة ولكن تنسيق الطلب خاطئ.

السبب: تتوقع الصفحة المستهدفة حقول GeeTest في نوع محتوى محدد (على سبيل المثال، نص JSON مقابل نموذج مشفر) أو بجانب حقول النموذج الأخرى.

الإصلاح: قارن طلب الإرسال الخاص بك بحركة مرور الشبكة من خلال الحل اليدوي. قم بمطابقة نوع المحتوى وترتيب الحقل وأي حقول إضافية.


مرجع سريع للخطأ لإصلاحه

خطأ / أعراض المرحلة السبب المحتمل إصلاح
ERROR_WRONG_USER_KEY إرسال مفتاح API تالف تحقق من مفتاح 32 حرفًا
ERROR_KEY_DOES_NOT_EXIST إرسال مفتاح غير صالح تحقق من لوحة التحكم
ERROR_ZERO_BALANCE إرسال لا توجد مواضيع مجانية انتظر أو قم بترقية الخطة
ERROR_PAGEURL إرسال pageurl مفقود أضف عنوان URL للصفحة الكاملة
ERROR_BAD_PARAMETERS إرسال gt أو challenge أو pageurl مفقود التحقق من كافة الحقول المطلوبة
CAPCHA_NOT_READY استطلاع الحل قيد التقدم انتظر 5 ثواني، أعد المحاولة
ERROR_WRONG_ID_FORMAT استطلاع معرف captcha غير رقمي استخدم المعرف الدقيق من in.php
ERROR_WRONG_CAPTCHA_ID استطلاع معرف كلمة التحقق غير صالح التحقق من معرف الإرسال
ERROR_EMPTY_ACTION استطلاع action=get مفقود إضافة معلمة الإجراء
ERROR_CAPTCHA_UNSOLVABLE استطلاع تحدي قديم أو متغير غير مدعوم قم بتحديث التحدي، أعد المحاولة
تقوم واجهة برمجة التطبيقات (API) بإرجاع القيم ولكن الصفحة ترفضها التحقق من الصحة تحدي قديم، حقول خاطئة، عنوان URL خاطئ تحديث التحدي، والتحقق من رسم الخرائط الميدانية

Python: حل GeeTest v3 الكامل مع تحدي جديد

import time
import requests

API_KEY = "YOUR_CAPTCHAAI_API_KEY"

SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"


def get_fresh_challenge(target_url):
    """Fetch a fresh GeeTest challenge from the target page."""
    resp = requests.get(f"{target_url}/api/geetest/register", timeout=10)
    data = resp.json()
    return data["gt"], data["challenge"]


def solve_geetest_v3(api_key, gt, challenge, pageurl):
    """Submit a GeeTest v3 challenge and return the validation package."""

    # Submit
    submit_resp = requests.post(
        SUBMIT_URL,
        data={
            "key": api_key,
            "method": "geetest",
            "gt": gt,
            "challenge": challenge,
            "pageurl": pageurl,
            "json": 1,
        },
        timeout=30,
    )
    submit_resp.raise_for_status()
    submit_data = submit_resp.json()

    if submit_data.get("status") != 1:
        raise RuntimeError(f"Submit failed: {submit_data}")

    captcha_id = submit_data["request"]
    print(f"Task created — captcha ID: {captcha_id}")

    # Wait before first poll
    time.sleep(15)

    # Poll for result
    for _ in range(60):
        result_resp = requests.get(
            RESULT_URL,
            params={
                "key": api_key,
                "action": "get",
                "id": captcha_id,
                "json": 1,
            },
            timeout=30,
        )
        result_resp.raise_for_status()
        result_data = result_resp.json()

        if result_data.get("request") == "CAPCHA_NOT_READY":
            time.sleep(5)
            continue

        if result_data.get("status") == 1:
            return result_data["request"]

        raise RuntimeError(f"Polling error: {result_data}")

    raise TimeoutError("GeeTest v3 solve timed out")


# Usage: always fetch a fresh challenge first
PAGE_URL = "https://example.com/login"
gt, challenge = get_fresh_challenge(PAGE_URL)
result = solve_geetest_v3(API_KEY, gt, challenge, PAGE_URL)
print(f"Result: {result}")

# The result contains: challenge, validate, seccode
# Map them to: geetest_challenge, geetest_validate, geetest_seccode

Node.js: حل GeeTest v3 الكامل مع التحدي الجديد

const API_KEY = "YOUR_CAPTCHAAI_API_KEY";
const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";

function sleep(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

async function getFreshChallenge(targetUrl) {
  const resp = await fetch(`${targetUrl}/api/geetest/register`);
  const data = await resp.json();
  return { gt: data.gt, challenge: data.challenge };
}

async function solveGeetestV3(apiKey, gt, challenge, pageurl) {
  // Submit
  const submitResp = await fetch(SUBMIT_URL, {
    method: "POST",
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    body: new URLSearchParams({
      key: apiKey,
      method: "geetest",
      gt: gt,
      challenge: challenge,
      pageurl: pageurl,
      json: "1",
    }),
  });

  const submitData = await submitResp.json();
  if (submitData.status !== 1) {
    throw new Error(`Submit failed: ${JSON.stringify(submitData)}`);
  }

  const captchaId = submitData.request;
  console.log(`Task created — captcha ID: ${captchaId}`);

  await sleep(15_000);

  // Poll for result
  for (let i = 0; i < 60; i++) {
    const resultResp = await fetch(
      `${RESULT_URL}?${new URLSearchParams({
        key: apiKey,
        action: "get",
        id: captchaId,
        json: "1",
      })}`
    );

    const resultData = await resultResp.json();

    if (resultData.request === "CAPCHA_NOT_READY") {
      await sleep(5_000);
      continue;
    }

    if (resultData.status === 1) {
      return resultData.request;
    }

    throw new Error(`Polling error: ${JSON.stringify(resultData)}`);
  }

  throw new Error("GeeTest v3 solve timed out");
}

// Usage
const PAGE_URL = "https://example.com/login";

(async () => {
  const { gt, challenge } = await getFreshChallenge(PAGE_URL);
  const result = await solveGeetestV3(API_KEY, gt, challenge, PAGE_URL);
  console.log("Result:", result);
  // Map result fields to: geetest_challenge, geetest_validate, geetest_seccode
})();

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

لماذا يستمر GeeTest في الفشل حتى عندما يبدو الطلب صحيحًا؟

السبب الأكثر شيوعاً هو قيمة challenge التي لا معنى لها. حتى لو كان gt وpageurl صحيحين، فسيؤدي الاختبار منتهي الصلاحية إلى فشل واجهة برمجة التطبيقات (API) أو إلى رفض الصفحة المستهدفة للقيم التي تم إرجاعها. قم دائمًا بإحضار تحدي جديد مباشرة قبل كل طلب حل.

ما هو الخطأ الأكثر شيوعًا في GeeTest v3؟

إعادة استخدام قيمة challenge التي لم تعد جديدة. تحذر مستندات CaptchaAI صراحةً من أنه بمجرد تحميل اختبار التحقق على الصفحة، يصبح التحدي القديم غير صالح.

ماذا يعني CAPCHA_NOT_READY؟

وهذا يعني أن الحل لا يزال قيد التقدم، وليس خطأ. انتظر 5 ثوان وقم باستطلاع res.php مرة أخرى. يستغرق حل GeeTest v3 في CaptchaAI عادةً أقل من 12 ثانية.

ماذا علي أن أفعل إذا قامت واجهة برمجة التطبيقات (API) بإرجاع قيم ولكن الصفحة لا تزال ترفضها؟

تحقق من ثلاثة أشياء بالترتيب:

  1. حداثة التحدي — هل تم جلب challenge مباشرة قبل الإرسال؟
  2. تعيين الحقول — هل تم تعيين geetest_challenge وgeetest_validate وgeetest_seccode بشكل صحيح للحقول المتوقعة للصفحة المستهدفة؟
  3. بنية الطلب — هل تتوقع الصفحة المستهدفة JSON أو بيانات مشفرة بالنموذج أو تنسيق آخر؟ قارن بحركة مرور الشبكة الخاصة بالحل اليدوي.

كيف يختلف GeeTest v3 عن reCAPTCHA v2؟

GeeTest v3 عبارة عن تحدي لغز/slider (وليس مربع اختيار). يتطلب معلمة challenge الديناميكية التي يجب تحديثها لكل حل. تقوم واجهة برمجة التطبيقات (API) بإرجاع ثلاثة حقول للتحقق (challenge، validate، seccode) بدلاً من رمز مميز واحد. لحل reCAPTCHA v2، راجعكيفية حل reCAPTCHA v2 باستخدام API.

هل يدعم CaptchaAI GeeTest v4؟

تتناول هذه المقالة GeeTest v3 فقط. تحقق منمستندات CaptchaAI APIللحصول على أحدث أنواع captcha المدعومة.


أصلح سير عمل GeeTest

إذا فشل تكامل GeeTest:

  1. تحقق من التحدي — هل هو جديد؟ جلب واحدة جديدة مباشرة قبل كل حل.
  2. التحقق من المعلمات — يجب أن تكون جميع gt وchallenge وpageurl صحيحة.
  3. فحص تعيين الحقول — يجب أن تنتقل challenge وvalidate وseccode إلى الحقول الصحيحة.
  4. مقارنة بالحل اليدوي — استخدم أدوات DevTools في المتصفح لالتقاط بنية الطلب الدقيقة من حل GeeTest اليدوي الناجح.

ابدأ بـCaptchaAI GeeTest v3 ، قم بتأكيد المعلمات الخاصة بك مقابلمستندات API، وقراءةكيف يعمل GeeTest v3 Captchaإذا كنت بحاجة إلى معلومات أساسية عن تدفق التحدي.


سجل التكرار

التكرار التركيز التغييرات
المسودة 1 الهيكل والمحتوى المسودة الأولية لاستكشاف الأخطاء وإصلاحها - 3 مراحل للخطأ، وجدول الأخطاء لإصلاحها، والأسئلة الشائعة
المسودة 2 الدقة الفنية تم التحقق من جميع رموز الخطأ ومعلمات GeeTest مقابل captchaai.com/api-docs. تمت إضافة جدول معلمات API. تم تأكيد التحدي /validate/seccode لرسم الخرائط الميدانية.
المسودة 3 أمثلة على التعليمات البرمجية تمت إضافة أمثلة كاملة لـ Python وNode.js مع جلب التحدي الجديد. تمت إضافة الكود الكاذب لنمط تحديث التحدي.
المسودة 4 عمق فشل التحقق من الصحة قسم موسع للتحقق من صحة الصفحة المستهدفة مع 4 أوضاع فشل مميزة. تمت إضافة جدول تعيين الحقول. تمت إضافة تشخيص عدم تطابق بنية الطلب.
المسودة 5 تلميع ضمان الجودة النهائي تم التحقق من تطابق جميع رموز الخطأ مع المستندات الرسمية. تمت إضافة جدول مرجعي سريع. تشديد المقدمة. تمت إضافة روابط متقاطعة إلى مقالات المجموعة. إجابات الأسئلة الشائعة المؤكدة جاهزة للمخطط.

ملخص الأصول المرئية

صورة البطل

  • نص بديل: استكشاف أخطاء المطور وإصلاحها في أخطاء GeeTest v3 - تشخيص فشل الطلب والاستقصاء والتحقق من الصحة
  • يجب إظهار: سياق تصحيح الأخطاء بمراحل تدفق الأخطاء ونقاط الفشل
  • اسم الملف: geetest-v3-errors-troubleshooting-hero.png

في المادة البصرية 1

  • الموضع: بعد "أخطاء مرحلة النتيجة"
  • النوع: شجرة القرار
  • نص بديل: شجرة القرار لحالات فشل GeeTest v3 — أخطاء الطلب مقابل أخطاء الاستقصاء مقابل فشل التحقق من الصحة
  • اسم الملف: geetest-v3-error-decision-tree.png

في المادة البصرية 2

  • الموضع: بعد "فشل التحقق من صحة الصفحة المستهدفة"
  • النوع: مخطط الأسباب والحلول
  • نص بديل: رسم تخطيطي يوضح الأسباب الشائعة لرفض صفحة GeeTest v3 وإصلاحاتها
  • اسم الملف: geetest-v3-validation-causes-fixes.png

مقالات ذات صلة

أدلة ذات صلة

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