إذا توقّف سكربت الأتمتة فجأة على موقع كان يعمل بلا مشاكل، فقد يكون السبب أن الموقع انتقل من GeeTest v3 إلى GeeTest v4. يختلف الإصداران في البنية وأنواع التحديات وآلية التحقق إلى حدّ أن الشيفرة التي تبحث عن معاملَي gt وchallenge لن تجد لهما أثراً في v4. والخلاصة العملية أولاً: يحل CaptchaAI اختبارات GeeTest v3 بمعدل نجاح مرتفع. أما GeeTest v4 فلا يحله.
يوضّح هذا الدليل ما الذي تغيّر بالضبط في الإصدار الرابع، وكيف تكتشف الإصدار الذي يعمل على صفحتك، وأين يقف CaptchaAI من الإصدارين. المثال البرمجي بلغة Python ويعتمد على Selenium، ويمكنك تكييفه بسهولة مع Node.js أو أي بيئة أخرى.
أبرز الفروق بين GeeTest v3 و v4
على المستوى العملي، أهم فرق هو أن v4 نقل جزءاً كبيراً من منطق التهيئة إلى جانب العميل واستبدل معامل challenge الثابت بنظام تحقق قائم على lot_number وpass_token. الجدول التالي يلخّص الفروق التي تهمّ مهندس الأتمتة مباشرةً:
| الميزة | GeeTest v3 | GeeTest v4 |
|---|---|---|
| التهيئة | gt + challenge من الخادم |
captcha_id فقط |
| مصدر معامل التحدي | يأتي من استدعاء API | يُنشأ من جانب العميل |
| أنواع التحديات | سحب، نقر | سحب، نقر، اختيار أيقونات، استدلال مكاني |
| التحقق | الخادم يعيد challenge |
يعتمد على lot_number + pass_token |
| نقطة نهاية API | api.geetest.com |
gcaptcha4.geetest.com |
| تدرّج الصعوبة | ثابت | تقييم مخاطر تكيّفي |
النتيجة المباشرة لهذه الفروق أن أي تكامل مبني على v3 لا يمكن توجيهه ببساطة إلى صفحة تعمل بـ v4: تتغيّر المعاملات، وتتغيّر القيم التي يعيدها التحقق، بل ويتغيّر عنوان نقطة النهاية التي يخاطبها المتصفح.
أنواع تحديات GeeTest v4 الجديدة
وسّع GeeTest v4 مجموعة التحديات إلى أربعة أنماط رئيسية، بعضها موروث من v3 وبعضها جديد كلياً. فهم هذه الأنماط يساعدك على تفسير ما يراه المستخدم النهائي على الشاشة.
لغز السحب
التحدي الكلاسيكي القائم على المطابقة: يسحب المستخدم قطعة اللغز حتى تستقر في مكانها الصحيح. وهو النمط الأكثر شيوعاً والأقرب إلى تجربة v3.
النقر والاختيار
يُطلب من المستخدم النقر على كائنات محددة داخل صورة، مثل "انقر على كل الوجوه"، ويعتمد على التعرّف على الرموز والصور.
الاستدلال المكاني
هذا النمط جديد في الإصدار الرابع: يرتّب المستخدم أشكالاً وفق نمط مكاني معيّن، وهو أكثر تعقيداً من تحديات v3 لأنه يقيس فهم العلاقات بين العناصر لا مجرد الدقة الحركية.
مطابقة الأيقونات
يطابق المستخدم أيقونات معروضة ضمن تسلسل محدد، وهو من أصعب الأنماط على الأتمتة اليدوية لاعتماده على ترتيب متغيّر.
أيّاً كان النمط الذي تعرضه الصفحة من هذه الأنماط، فهي تعمل بـ GeeTest v4، ولا يستطيع CaptchaAI حلّها. يحل CaptchaAI اختبارات GeeTest v3.
كيف تكتشف إصدار GeeTest على الصفحة؟
قبل أي محاولة حل، تحقّق من الإصدار الفعلي على الصفحة. أوضح مؤشّرَين على v4 هما ظهور captcha_id بدل gt، ووجود سكربت gcaptcha4 أو gt4.js في مصدر الصفحة. تخيّل فريقاً في الرياض يُجري اختبارات جودة آلية على صفحة تسجيل الدخول في بوابة تجارة إلكترونية إقليمية: بعد ترقية المزوّد إلى v4، بدأت السكربتات تُعيد ERROR_WRONG_CAPTCHA_ID لأنها ما زالت ترسل قيمة gt القديمة. خطوتهم الأولى هي تأكيد الإصدار برمجياً قبل أي شيء آخر، وهذا ما تفعله الدالة التالية:
# extract_geetest_v4.py
import re
from selenium import webdriver
def extract_geetest_v4_params(url):
"""Extract GeeTest v4 captcha_id from a page."""
driver = webdriver.Chrome()
driver.get(url)
page_source = driver.page_source
# GeeTest v4 uses captcha_id instead of gt
match = re.search(r'captcha_id["\']?\s*[:=]\s*["\']([a-f0-9]+)', page_source)
captcha_id = match.group(1) if match else None
# Check for v4-specific script
is_v4 = "gcaptcha4" in page_source or "gt4.js" in page_source
driver.quit()
return {
"captcha_id": captcha_id,
"is_v4": is_v4,
"pageurl": url,
}
# Usage
params = extract_geetest_v4_params("https://example.com/login")
print(f"Captcha ID: {params['captcha_id']}")
print(f"Is v4: {params['is_v4']}")
لأن كثيراً من المواقع تبني عنصر التحدي عبر JavaScript بعد تحميل الصفحة، فإن الاعتماد على متصفح حقيقي مثل Selenium أدقّ من قراءة الـ HTML الخام؛ فهو يمنح الصفحة فرصة لحقن captcha_id قبل أن تبحث عنه.
أين يقف CaptchaAI
يحل CaptchaAI اختبارات GeeTest v3، ولا يحل GeeTest v4. تستقبل طريقة geetest في CaptchaAI قيم v3 (gt وقيمة challenge جديدة وpageurl) وتعيد challenge وvalidate وseccode. لا توجد فيها معاملات خاصة بـ v4، فلا ترسل captcha_id الخاص بـ v4 على أنه gt. ابدأ بالفحص الموضّح أعلاه: إذا كانت الصفحة تحمّل gcaptcha4.geetest.com أو gt4.js فهي تعمل بـ v4، ولا يستطيع CaptchaAI حلّها. وإذا كانت الصفحة ما زالت تعمل بـ v3، فإن دليل حل GeeTest v3 باستخدام CaptchaAI API يشرح المسار الكامل.
كيف يختلف التحقق في v4
في صفحة تعمل بـ v3، ينتج عن اجتياز التحدي ثلاث قيم: geetest_challenge وgeetest_validate وgeetest_seccode، وتتحقق منها الواجهة الخلفية للموقع لدى GeeTest. أما في صفحة تعمل بـ v4، فتعيد captchaObj.getValidate() أربع قيم بدلاً منها: lot_number وcaptcha_output وpass_token وgen_time. وترسلها الواجهة الخلفية للموقع إلى نقطة النهاية /validate الخاصة بـ v4 على gcaptcha4.geetest.com، مع captcha_id الخاص بها وsign_token موقَّع بمفتاحها الخاص (راجع توثيق GeeTest v4: واجهة الويب وواجهة الخادم). والشيفرة التي تقرأ حقول v3 الثلاثة أو تملؤها لن تجد ما تعمل عليه في صفحة v4.
معالجة الأخطاء الشائعة
معظم المشكلات هنا ترجع إلى الخلط بين معاملات الإصدارين. الجدول التالي يربط كل مشكلة بسببها المباشر وحلّها:
| المشكلة | السبب | الحل |
|---|---|---|
البحث عن gt / challenge لا يجد شيئاً في صفحة كانت تعمل |
انتقل الموقع إلى GeeTest v4، ولا يُصدر الخادم فيه قيمة challenge |
ابحث في الصفحة عن gcaptcha4.geetest.com أو gt4.js؛ يحل CaptchaAI اختبارات GeeTest v3 فقط |
ERROR_WRONG_CAPTCHA_ID من CaptchaAI |
قيمة gt أو challenge غير صالحة، مثل إرسال captcha_id الخاص بـ v4 على أنه gt |
أرسل قيمة gt الخاصة بـ v3 في الصفحة وقيمة challenge جديدة مع كل طلب |
عدم العثور على captcha_id |
الصفحة تُبنى عبر JavaScript | استخدم Selenium لاستخراج القيمة من الصفحة بعد تحميلها |
أسئلة شائعة
هل يحل CaptchaAI اختبارات GeeTest v4؟
لا. يحل CaptchaAI اختبارات GeeTest v3 بمعدل نجاح مرتفع، ولا يحل GeeTest v4، لذا لا يوجد معدل نجاح لـ v4 يمكن ذكره.
هل يعمل سكربت GeeTest v3 القديم مع مواقع انتقلت إلى v4؟
لا. يعتمد سكربت v3 على معاملَي gt وchallenge، بينما لا يوفّرهما الإصدار الرابع أصلاً؛ فهو يبدأ بـ captcha_id ويعيد رموز تحقق مختلفة. اكتشف الإصدار أولاً: صفحات v3 يحلها CaptchaAI، أما صفحات v4 فلا يحلها.
ما دور lot_number وpass_token في تحقق v4؟
يحلّ هذان الرمزان محلّ معامل challenge القديم. يُرسَل lot_number كمعرّف للجلسة، بينما يُستخدم pass_token مع gen_time وcaptcha_output لإثبات اجتياز التحدي عند إرسال النموذج إلى الخادم.
هل يتطلب حلّ تحديات GeeTest وكيلاً سكنياً؟
ليس شرطاً، لكن استخدام وكيل سكني ذي سمعة عنوان IP جيدة يحسّن استقرار النتائج، خاصةً مع الطلبات عالية الحجم الصادرة من نطاق جغرافي واحد.
أدلة ذات صلة
حلّ GeeTest v3 — ابدأ مع CaptchaAI. لا يحل CaptchaAI اختبارات GeeTest v4.