Penjelasan Mendalam

GeeTest v4 CAPTCHA: Perubahan dan Panduan Solve

GeeTest v4 membawa perubahan signifikan dalam arsitektur, tipe challenge, dan pola integrasi dibandingkan v3. Panduan ini menjelaskan apa yang berubah dan cara menangani challenge v4.


GeeTest v3 vs v4 — Perbedaan Utama

Fitur GeeTest v3 GeeTest v4
Inisialisasi gt + challenge dari server captcha_id saja
Parameter challenge Diperlukan dari API call Generated client-side
Tipe challenge Slide, klik Slide, klik, pilih ikon, penalaran spasial
Validasi Server mengembalikan challenge Menggunakan lot_number + pass_token
API endpoint api.geetest.com gcaptcha4.geetest.com
Kesulitan Tetap Adaptive risk scoring

Mengekstrak Parameter 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://staging.example.com/qa-login")
print(f"Captcha ID: {params['captcha_id']}")
print(f"Is v4: {params['is_v4']}")

Solve GeeTest v4 dengan 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://staging.example.com/qa-login",
)
print(f"Solution: {solution}")

Menyuntikkan Solusi 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)

Tipe Challenge v4

Slide Puzzle

Challenge slide klasik. Pengguna menarik potongan puzzle.

Click Selection

Pengguna klik objek tertentu (misalnya, "klik semua wajah"). Menggunakan pengenalan ikon.

Penalaran Spasial

Baru di v4 — pengguna mengatur bentuk dalam pola spasial. Lebih kompleks dari v3.

Icon Matching

Pengguna mencocokkan ikon yang ditampilkan secara berurutan. Lebih sulit untuk diautomasi secara manual.

CaptchaAI menangani semua tipe challenge v4 — API mengabstraksi logika challenge-spesifik.


Pemecahan Masalah

Masalah Penyebab Perbaikan
ERROR_WRONG_CAPTCHA_ID Menggunakan gt v3 bukan captcha_id v4 Cek halaman untuk skrip gcaptcha4 untuk konfirmasi v4
Solusi ditolak Parameter version=4 tidak ada Selalu cantumkan version: "4" untuk v4
captcha_id tidak ditemukan Dirender via JavaScript Gunakan Selenium untuk ekstrak dari halaman yang dirender
Error format token Parse string bukan JSON Parse solusi sebagai JSON untuk token individual

Pertanyaan Umum

Bagaimana saya tahu apakah sebuah situs menggunakan GeeTest v3 atau v4?

Cari gcaptcha4.geetest.com atau gt4.js di sumber halaman untuk v4. Jika Anda melihat api.geetest.com dan parameter challenge, itu v3.

Apakah GeeTest v4 lebih sulit di-solve dari v3?

Untuk solver otomatis, tidak. CaptchaAI menangani kedua versi. Kesulitan adaptif v4 mempengaruhi friction end user tapi tidak mempengaruhi solving berbasis API.

Berapa success rate GeeTest v4?

CaptchaAI melaporkan success rate tinggi untuk GeeTest, konsisten di v3 dan v4.


Panduan Terkait

  • Panduan Parameter GeeTest Slide CAPTCHA dan API

Solve challenge GeeTest v4 — mulai dengan CaptchaAI.

Komentar dinonaktifkan untuk artikel ini.