الشروحات المعمقة

تغييرات GeeTest v4 CAPTCHA ودليل الحل

يجلب GeeTest v4 تغييرات كبيرة في البنية وأنواع التحديات وأنماط التكامل مقارنة بالإصدار 3. يشرح هذا الدليل ما تغير وكيفية حل تحديات الإصدار الرابع.


GeeTest v3 vs v4 — الاختلافات الرئيسية

ميزة GeeTest v3 GeeTest v4
التهيئة gt + challenge من الخادم captcha_id فقط
معلمة التحدي مطلوب من استدعاء API تم إنشاؤها من جانب العميل
أنواع التحدي حرك، انقر قم بالتمرير، والنقر، واختيار الرمز، والتفكير في المساحة
التحقق من الصحة يقوم الخادم بإرجاع challenge يستخدم lot_number + pass_token
نقطة نهاية API api.geetest.com gcaptcha4.geetest.com
صعوبة التحجيم ثابت تسجيل المخاطر التكيفية

استخراج معلمات GeeTest v4

# 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']}")

حل GeeTest v4 مع CaptchaAI

# solve_geetest_v4.py
import requests
import time
import os


def solve_geetest_v4(captcha_id, pageurl):
    """Submit GeeTest v4 to CaptchaAI and get solution."""
    api_key = os.environ["CAPTCHAAI_API_KEY"]

    # Submit task
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": api_key,
        "method": "geetest",
        "gt": captcha_id,      # captcha_id maps to the gt parameter
        "pageurl": pageurl,
        "version": "4",        # Specify v4 explicitly
        "json": 1,
    }, timeout=30)

    result = resp.json()
    if result.get("status") != 1:
        raise RuntimeError(f"Submit failed: {result.get('request')}")

    task_id = result["request"]

    # Poll for result
    time.sleep(10)
    for _ in range(30):
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key,
            "action": "get",
            "id": task_id,
            "json": 1,
        }, timeout=15)
        data = resp.json()

        if data.get("status") == 1:
            return data["request"]  # Contains validation tokens
        if data["request"] != "CAPCHA_NOT_READY":
            raise RuntimeError(data["request"])
        time.sleep(5)

    raise TimeoutError("GeeTest v4 solve timeout")


# Usage
solution = solve_geetest_v4(
    captcha_id="abc123def456",
    pageurl="https://example.com/login",
)
print(f"Solution: {solution}")

حقن محلول GeeTest v4

# inject_geetest_v4.py
import json
from selenium import webdriver
from selenium.webdriver.common.by import By


def inject_geetest_v4_solution(driver, solution):
    """Inject GeeTest v4 solution tokens into the page."""
    # Parse solution — v4 returns different tokens than v3
    if isinstance(solution, str):
        try:
            solution = json.loads(solution)
        except json.JSONDecodeError:
            pass

    # GeeTest v4 validation uses lot_number, pass_token, gen_time, captcha_output
    driver.execute_script("""
        var solution = arguments[0];

        // Set hidden form fields
        var fields = {
            'lot_number': solution.lot_number,
            'pass_token': solution.pass_token,
            'gen_time': solution.gen_time,
            'captcha_output': solution.captcha_output,
        };

        for (var name in fields) {
            var input = document.querySelector('input[name="' + name + '"]');
            if (!input) {
                input = document.createElement('input');
                input.type = 'hidden';
                input.name = name;
                document.forms[0].appendChild(input);
            }
            input.value = fields[name];
        }

        // Trigger validation callback if available
        if (window.captchaObj && typeof window.captchaObj.appendTo === 'function') {
            window.captchaObj.appendTo('#captcha-container');
        }
    """, solution)

أنواع التحدي v4

لغز الشريحة

التحدي الكلاسيكي للمطابقة. يقوم المستخدم بسحب قطعة اللغز.

انقر فوق التحديد

ينقر المستخدم على كائنات محددة (على سبيل المثال، "النقر على كل الوجوه"). يستخدم التعرف على الرموز.

المنطق الفضاء

الجديد في الإصدار 4 — يقوم المستخدم بترتيب الأشكال بنمط مكاني. أكثر تعقيدًا من الإصدار 3.

مطابقة الأيقونة

يطابق المستخدم الرموز الموضحة في تسلسل. من الصعب أتمتة يدويا.

** يتعامل CaptchaAI مع جميع أنواع تحديات الإصدار 4 ** — تلخص واجهة برمجة التطبيقات المنطق الخاص بالتحدي.


استكشاف الأخطاء وإصلاحها

المشكلة السبب الإجراء
ERROR_WRONG_CAPTCHA_ID استخدام قيمة v3 gt بدلاً من v4 captcha_id تحقق من الصفحة للحصول على البرنامج النصي gcaptcha4 لتأكيد الإصدار 4
تم رفض الحل معلمة version=4 مفقودة قم دائمًا بتحديد version: "4" للإصدار 4
لم يتم العثور على captcha_id JavaScript المقدمة استخدم السيلينيوم للاستخراج من الصفحة المعروضة
خطأ في تنسيق الرمز المميز تحليل السلسلة بدلاً من JSON تحليل الحل كـ JSON للحصول على الرموز الفردية

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

كيف أعرف ما إذا كان الموقع يستخدم GeeTest v3 أو الإصدار 4؟

ابحث عن gcaptcha4.geetest.com أو gt4.js في مصدر الصفحة للإصدار 4. إذا رأيت api.geetest.com ومعلمة challenge، فهذا هو الإصدار v3.

هل حل GeeTest v4 أصعب من حل الإصدار الثالث؟

بالنسبة للحلول الآلية، لا. يتعامل CaptchaAI مع كلا الإصدارين. تؤثر الصعوبة التكيفية لـ V4 على احتكاك المستخدم النهائي ولكن ليس على الحل القائم على واجهة برمجة التطبيقات.

ما هو معدل نجاح GeeTest v4؟

تشير CaptchaAI إلى معدل نجاح بمعدل نجاح عالٍ في تحديات GeeTest، وهو ما يتوافق مع الإصدارين 3 و4.


أدلة ذات صلة


حل تحديات GeeTest v4 —ابدأ بـ CaptchaAI.

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