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.jsberarti v4;api.geetest.com+ parameterchallengeberarti 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, danpass_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:
- Tambahkan deteksi versi di awal — bila
gcaptcha4terdeteksi, tandai job sebagai v4. - Alihkan job v4 ke antrean tunda dan catat metriknya, sambil tetap memproses target v3 seperti biasa.
- 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.