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.