Câu trả lời ngắn gọn trước: hiện tại CaptchaAI giải GeeTest v3 với tỷ lệ giải thành công cao, còn GeeTest v4 vẫn đang sắp ra mắt và chưa khả dụng. Nếu trang bạn đang kiểm thử dùng v4, bài này giúp bạn nhận diện đúng phiên bản, hiểu v4 đã đổi gì so với v3 và dựng sẵn luồng tích hợp cho thời điểm v4 lên sóng.
Nhiều đội QA và thu thập dữ liệu tại Việt Nam gặp GeeTest trên các cổng có nguồn gốc từ nền tảng Trung Quốc hoặc trang thương mại điện tử. Biết chắc đang là v3 hay v4 giúp bạn chọn đúng cách xử lý và tránh gửi nhầm tham số — lỗi phổ biến nhất khi chuyển giữa hai phiên bản.
v3 và v4 khác nhau ở đâu
GeeTest v4 không chỉ là bản làm mới giao diện. Nó thay đổi cách khởi tạo, cách sinh tham số thử thách và cách xác thực kết quả. Bảng dưới đây tóm tắt những khác biệt bạn sẽ chạm tới khi tích hợp.
| Tính năng | GeeTest v3 | GeeTest v4 |
|---|---|---|
| Khởi tạo | gt + challenge từ máy chủ |
chỉ captcha_id |
| Tham số thử thách | Lấy từ lệnh gọi API | Sinh ở phía client |
| Loại thử thách | Trượt, nhấp | Trượt, nhấp, chọn biểu tượng, suy luận không gian |
| Xác thực | Máy chủ trả về challenge |
Dùng lot_number + pass_token |
| Endpoint API | api.geetest.com |
gcaptcha4.geetest.com |
| Điều chỉnh độ khó | Cố định | Chấm điểm rủi ro thích ứng |
Ba điểm dễ vấp nhất khi chuyển từ v3 sang v4:
- v3 lấy
gtvàchallengetừ máy chủ trước khi hiển thị; v4 chỉ cầncaptcha_idvà tự sinh phần còn lại ở phía client. - v4 dùng
lot_number+pass_tokenđể xác thực thay chochallenge— bộ token trả về hoàn toàn khác v3. - v4 chấm điểm rủi ro thích ứng, nên cùng một trang có thể tăng hoặc giảm độ khó tùy hành vi phiên truy cập.
Các loại thử thách trong v4
Trước khi bàn tới tích hợp, cần nắm bốn dạng thử thách mà v4 có thể hiển thị — nhiều hơn và đa dạng hơn v3.
Trượt (slide)
Thử thách kéo mảnh ghép cổ điển: người dùng kéo một mảnh vào đúng vị trí. Đây là dạng quen thuộc kế thừa từ v3.
Nhấp chọn đối tượng
Người dùng nhấp vào các đối tượng cụ thể (ví dụ "nhấp vào tất cả khuôn mặt"), dựa trên nhận dạng biểu tượng.
Suy luận không gian
Dạng mới trong v4 — người dùng sắp xếp các hình theo một mẫu không gian. Phức tạp hơn hẳn v3.
Ghép biểu tượng theo thứ tự
Người dùng ghép các biểu tượng hiển thị theo trình tự, khó tự động hóa thủ công hơn.
Khi hỗ trợ v4 chính thức ra mắt, API của CaptchaAI sẽ trừu tượng hóa phần logic riêng của từng dạng thử thách, giống như cách nó xử lý v3 hôm nay. Hiện tại CaptchaAI giải GeeTest v3; v4 sắp ra mắt.
Cách phát hiện GeeTest v4 trên trang
Trước khi gửi task, hãy xác định trang đang dùng v4 hay v3. v4 nhúng script gcaptcha4 (hoặc gt4.js) và dùng captcha_id thay cho cặp gt + challenge. Đoạn Selenium sau trích captcha_id cùng cờ is_v4 từ HTML đã render:
# 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']}")
Nếu is_v4 trả về True, trang dùng v4; ngược lại, xử lý theo luồng v3 quen thuộc.
Luồng giải GeeTest v4 (sắp ra mắt)
GeeTest v4 hiện chưa được hỗ trợ và chỉ có thể mô tả là sắp ra mắt; tính năng này nằm trong lộ trình của CaptchaAI nhưng không khả dụng rộng rãi. Trong lúc chờ, hãy dùng GeeTest v3 mà CaptchaAI giải được ngay hôm nay với tỷ lệ giải thành công cao. Đoạn code dưới đây minh họa luồng v4 dự kiến để bạn chuẩn bị trước; kiểm tra trạng thái hiện tại tại trang các loại được hỗ trợ của CaptchaAI.
Về bản chất, luồng đi theo bốn bước quen thuộc của mọi tích hợp CaptchaAI:
- Gửi task tới
in.phpkèmcaptcha_id,pageurlvàversion. - Nhận về ID task nếu
statustrả về1. - Polling
res.phpcho tới khi có kết quả. - Chèn bộ token trả về vào form của trang.
# 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}")
Với GeeTest v3 hôm nay, thay version thành 3 và dùng cặp gt + challenge thay cho captcha_id.
Chèn lời giải v4 vào trang
Bước cuối là đưa các token trả về vào form ẩn của trang. Lưu ý v4 trả về một bộ token khác v3 — gồm lot_number, pass_token, gen_time và captcha_output:
# 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)
Vì token được trả về dưới dạng JSON, hãy luôn parse chuỗi kết quả thành object trước khi đọc từng trường — parse nhầm chuỗi thô là nguyên nhân phổ biến khiến form không nhận.
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
ERROR_WRONG_CAPTCHA_ID |
Dùng giá trị v3 gt thay cho v4 captcha_id |
Kiểm tra script gcaptcha4 trên trang để xác nhận v4 |
| Lời giải bị từ chối | Thiếu tham số version=4 |
Luôn chỉ định version: "4" cho v4 |
Không tìm thấy captcha_id |
Trang render bằng JavaScript | Dùng Selenium trích xuất từ trang đã render |
| Lỗi định dạng token | Parse chuỗi thay vì JSON | Parse lời giải dưới dạng JSON để lấy từng token riêng |
Câu hỏi thường gặp
CaptchaAI đã giải được GeeTest v4 chưa?
Chưa. GeeTest v4 hiện là tính năng sắp ra mắt và chưa khả dụng rộng rãi. Ngay hôm nay CaptchaAI giải GeeTest v3 với tỷ lệ giải thành công cao; hãy dùng v3 trong lúc chờ v4 lên sóng.
Trong lúc chờ v4, tôi giải GeeTest v3 thế nào?
Dùng đúng luồng bốn bước qua API: trích gt và challenge, gửi task tới in.php với version=3, polling res.php, rồi chèn token vào form. Đổi version sang 3 và cặp tham số là toàn bộ khác biệt so với đoạn code v4 ở trên.
Làm sao phân biệt GeeTest v3 và v4 trên một trang?
Tìm gcaptcha4.geetest.com hoặc gt4.js trong nguồn trang thì đó là v4. Nếu thấy api.geetest.com cùng tham số challenge thì đó là v3.
Giải GeeTest với CaptchaAI tính chi phí thế nào?
CaptchaAI tính giá theo thread (luồng giải đồng thời), không tính theo từng lần giải. Gói nhỏ nhất là BASIC ($15/tháng, 5 thread) với số lần giải không giới hạn trong tháng, nên chi phí phụ thuộc vào số task đồng thời chứ không phải tổng số CAPTCHA.
Hướng dẫn liên quan
Giải GeeTest v3 ngay hôm nay — bắt đầu với CaptchaAI. GeeTest v4 sắp ra mắt.