与 v3 相比,GeeTest v4 在架构、挑战类型和集成模式方面带来了重大变化。本指南解释了发生的变化以及如何解决 v4 挑战。
GeeTest v3 与 v4 — 主要区别
| 特征 | GeeTest v3 | GeeTest v4 |
|---|---|---|
| 初始化 | 来自服务器的 gt + challenge |
仅限 captcha_id |
| 挑战参数 | API 调用需要 | 生成的客户端 |
| 挑战类型 | 滑动、点击 | 滑动、点击、图标选择、空间推理 |
| 验证 | 服务器返回challenge |
使用 lot_number + pass_token |
| API端点 | api.geetest.com |
gcaptcha4.geetest.com |
| 扩展难度 | 固定的 | 自适应风险评分 |
提取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']}")
用 CaptchaAI 解决 GeeTest v4
# 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}")
注入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)
v4 挑战类型
幻灯片拼图
经典的滑动匹配挑战。用户拖动一块拼图。
单击选择
用户单击特定对象(例如,“单击所有面”)。使用图标识别。
空间推理
v4 中的新增功能 — 用户以空间模式排列形状。比 v3 更复杂。
图标匹配
用户匹配序列中显示的图标。手动自动化更难。
CaptchaAI 处理所有 v4 挑战类型 — API 抽象了特定于挑战的逻辑。
故障排除
| 问题 | 原因 | 处理方式 |
|---|---|---|
ERROR_WRONG_CAPTCHA_ID |
使用 v3 gt 值代替 v4 captcha_id |
检查 gcaptcha4 脚本页面以确认 v4 |
| 解决方案被拒绝 | 缺少 version=4 参数 |
始终为 v4 指定 version: "4" |
captcha_id 未找到 |
JavaScript 渲染 | 使用 Selenium 从渲染页面中提取 |
| 令牌格式错误 | 解析字符串而不是 JSON | 将解决方案解析为 JSON 以获取单个令牌 |
常问问题
我如何知道网站是否使用 GeeTest v3 还是 v4?
在 v4 的页面源代码中查找 gcaptcha4.geetest.com 或 gt4.js。如果您看到 api.geetest.com 和 challenge 参数,则它是 v3。
GeeTest v4 比 v3 更难解决吗?
对于自动求解器来说,没有。 CaptchaAI 处理这两个版本。 V4 的自适应难度会影响最终用户的摩擦,但不会影响基于 API 的解决方案。
GeeTest v4的成功率是多少?
CaptchaAI 报告 GeeTest 挑战的成功率为 100%,在 v3 和 v4 中保持一致。
相关指南
解决 GeeTest v4 挑战 —以 CaptchaAI 开头.