تقع معظم حالات فشل 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) بإرجاع قيم ولكن الصفحة لا تزال ترفضها؟
تحقق من ثلاثة أشياء بالترتيب:
- حداثة التحدي — هل تم جلب
challengeمباشرة قبل الإرسال؟ - تعيين الحقول — هل تم تعيين
geetest_challengeوgeetest_validateوgeetest_seccodeبشكل صحيح للحقول المتوقعة للصفحة المستهدفة؟ - بنية الطلب — هل تتوقع الصفحة المستهدفة 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:
- تحقق من التحدي — هل هو جديد؟ جلب واحدة جديدة مباشرة قبل كل حل.
- التحقق من المعلمات — يجب أن تكون جميع
gtوchallengeوpageurlصحيحة. - فحص تعيين الحقول — يجب أن تنتقل
challengeوvalidateوseccodeإلى الحقول الصحيحة. - مقارنة بالحل اليدوي — استخدم أدوات 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
مقالات ذات صلة
- حل Geetest V3 Nodejs
- حل مشكلة Geetest V3 Nodejs Captchaai
- أخطاء وإصلاحات Captcha الشائعة لصورة الشبكة