Explainers

GeeTest v4 CAPTCHA: Perubahan dan Panduan Solve

Integrasi GeeTest yang tadinya lancar tiba-tiba menolak setiap token, dan di source halaman muncul gcaptcha4. Itu tanda Anda berhadapan dengan GeeTest v4 — versi yang merombak cara inisialisasi, tipe challenge, sekaligus validasi dibanding v3. Jawaban singkat soal dukungan: GeeTest v4 di CaptchaAI masih berstatus segera hadir dan belum tersedia; yang bisa Anda selesaikan lewat CaptchaAI hari ini adalah GeeTest v3. Artikel ini memetakan apa saja yang berubah, cara memastikan sebuah situs memakai v4, dan bagaimana menyiapkan kode agar siap begitu dukungan v4 dirilis.

Ringkasan singkat sebelum mulai

  • Deteksi versi dulu. Skrip gcaptcha4/gt4.js berarti v4; api.geetest.com + parameter challenge berarti v3.
  • v3 didukung hari ini di CaptchaAI dengan tingkat keberhasilan tinggi.
  • v4 masih segera hadir — belum tersedia, tapi Anda bisa menyiapkan kode dari sekarang.
  • Token validasi berbeda: v4 memakai captcha_id, lot_number, dan pass_token.

Cara memastikan situs memakai v3 atau v4

Sebelum menulis kode apa pun, pastikan dulu versinya. Penanda paling andal ada di source halaman: skrip gcaptcha4 atau gt4.js menandakan v4, sedangkan api.geetest.com plus parameter challenge menandakan v3. Karena widget dirender lewat JavaScript, ambil source setelah halaman termuat penuh — Selenium cocok untuk kebutuhan ini. Salah menebak versi adalah penyebab error paling umum: memakai alur v3 pada halaman v4 akan langsung ditolak server.

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

Perubahan utama dari v3 ke v4

Perubahan v4 bukan sekadar tampilan. Arsitektur inisialisasi dan alur validasinya berbeda, sehingga kode v3 lama Anda tidak akan langsung jalan.

Aspek GeeTest v3 GeeTest v4
Inisialisasi gt + challenge dari server cukup captcha_id
Parameter challenge diambil dari API call dibuat di sisi client
Tipe challenge slide, klik slide, klik, pilih ikon, penalaran spasial
Validasi server mengembalikan challenge memakai lot_number + pass_token
Endpoint API api.geetest.com gcaptcha4.geetest.com
Tingkat kesulitan tetap adaptive risk scoring

Status GeeTest v4 di CaptchaAI saat ini

Perlu ditegaskan tanpa ambigu: GeeTest v4 belum didukung. Statusnya masih segera hadir di roadmap CaptchaAI, jadi jangan menaruhnya di jalur produksi dulu. Untuk kebutuhan hari ini, GeeTest v3 sudah bisa diselesaikan CaptchaAI dengan tingkat keberhasilan tinggi, dan banyak situs masih memakai v3. Anggap v4 sebagai pekerjaan persiapan: kenali parameternya, rapikan deteksi versi, dan tunggu status resmi berubah.

Alur solve v4 yang direncanakan

Cuplikan berikut menunjukkan alur v4 yang direncanakan — bukan yang sudah aktif — supaya kode Anda siap lebih awal begitu dukungan dirilis. Pola pemanggilannya sama seperti tipe lain: kirim task ke in.php, simpan task ID, lalu polling res.php sampai token siap. Cek halaman tipe yang didukung di captchaai.com untuk status terkini sebelum mengaktifkannya.

# 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 token hasil ke halaman

Begitu solver mengembalikan token, langkah terakhir adalah menyuntikkannya ke form. v4 memakai set token yang berbeda dari v3 — lot_number, pass_token, gen_time, dan captcha_output — jadi jangan pakai ulang logika injeksi v3 apa adanya.

# 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)

Empat tipe challenge v4

Slide puzzle

Challenge slide klasik: pengguna menarik potongan puzzle ke posisi yang pas.

Seleksi klik

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

Penalaran spasial

Baru di v4 — pengguna menyusun bentuk mengikuti pola spasial. Lebih kompleks dibanding challenge v3 mana pun.

Pencocokan ikon

Pengguna mencocokkan ikon yang muncul secara berurutan. Jauh lebih sulit diautomasi secara manual.

Begitu dukungan v4 dirilis, API CaptchaAI akan menyembunyikan logika spesifik tiap challenge di balik satu pemanggilan. Untuk saat ini, CaptchaAI menyelesaikan GeeTest v3; dukungan v4 segera hadir.

Menyiapkan pipeline sebelum v4 aktif

Contoh dari lapangan: tim monitoring harga di Jakarta yang menjalankan worker scraping di region AWS ap-southeast-1 (Singapura) mulai menemukan challenge v4 di sebagian target. Karena solve v4 belum tersedia, susun pipeline agar migrasi nanti hanya butuh sedikit perubahan:

  1. Tambahkan deteksi versi di awal — bila gcaptcha4 terdeteksi, tandai job sebagai v4.
  2. Alihkan job v4 ke antrean tunda dan catat metriknya, sambil tetap memproses target v3 seperti biasa.
  3. Siapkan pemanggilan solve v4 di belakang feature flag, siap diaktifkan saat status resmi berubah.

Adaptive risk scoring v4 berarti frekuensi challenge bisa naik seiring pola trafik, sehingga logging metrik deteksi sejak awal membantu memperkirakan beban. Ingat juga UU Pelindungan Data Pribadi (UU 27/2022): kumpulkan hanya data yang memang berhak Anda proses.

Pemecahan masalah

Gejala Penyebab Solusi
ERROR_WRONG_CAPTCHA_ID masih memakai gt v3, bukan captcha_id v4 cek skrip gcaptcha4 di halaman untuk memastikan v4
token ditolak parameter version=4 tidak disertakan selalu cantumkan version: "4" untuk v4
captcha_id tidak ketemu nilainya dirender via JavaScript ambil dari halaman yang sudah dirender memakai Selenium
format token error string diparse mentah, bukan sebagai JSON parse hasil sebagai JSON agar tiap token terbaca

Pertanyaan umum

Apakah GeeTest v4 sudah tersedia di CaptchaAI?

Belum. Dukungan GeeTest v4 masih berstatus segera hadir dan belum tersedia. Yang bisa Anda selesaikan lewat CaptchaAI saat ini adalah GeeTest v3.

Parameter apa yang berbeda antara v3 dan v4?

v3 memerlukan gt dan challenge dari server, sedangkan v4 cukup captcha_id di awal lalu mengembalikan lot_number dan pass_token pada tahap validasi.

Bagaimana cara memastikan sebuah situs memakai v4?

Cari gcaptcha4.geetest.com atau gt4.js di source halaman untuk v4. Bila yang muncul api.geetest.com dan parameter challenge, itu v3.

Apakah GeeTest v3 masih relevan dipelajari?

Sangat. GeeTest v3 adalah versi yang didukung CaptchaAI hari ini, dan banyak situs masih memakainya. Menguasai alur v3 membuat Anda siap begitu dukungan v4 diaktifkan.

Panduan terkait

Solve GeeTest v3 hari ini — mulai dengan CaptchaAI. Dukungan GeeTest v4 segera hadir.

Komentar dinonaktifkan untuk artikel ini.