在本文中,我们尽量回答了所有关键问题。要开始解决问题,第一步是确定当前使用的是哪种防护系统。为此,您可以查看常见验证码与反机器人防护系统列表,其中提供了可视化示例和关键特征,帮助您快速判断自己正在使用哪一种方案。
如果您发现自己的网站使用的是 GeeTest CAPTCHA v4,下一步就是更深入地了解它的特性和具体工作方式。在本文中,您还可以查看 GeeTest CAPTCHA v4 的接入说明,以便彻底弄清它在您的网站上是如何运行的。这样一来,您不仅能更好地理解当前的防护机制,还可以更合理地规划后续的维护和支持。
测试包含 GeeTest CAPTCHA v4 的表单时,常常需要确认 captcha 是否集成正确并工作正常。
你可以手动验证站点上的 captcha。
若想自动解题,可以使用 CapMonster Cloud 等服务,它会接收验证码参数、在服务器中解析并返回可直接使用的 token。把 token 注入表单即可无需人工操作通过验证。
通过 CapMonster Cloud API 工作的一般流程:
在请求解决 GeeTest CAPTCHA v4 时,需要传入以下参数:
type - GeeTestTask;
websiteURL - 出现并解决验证码的页面地址(URL);
gt - 当前域名的 GeeTest 验证码标识(captcha_id 参数);
version - 4;
geetestApiServerSubdomain - Geetest API 服务器的子域名(必须不同于 api.geetest.com);
geetestGetLib - 用于在页面上加载和显示验证码的脚本路径,对某些站点是必需参数;
initParameters - 用于 v4 的附加参数,与 “riskType”(验证码类型 / 验证特性)一起使用.
https://api.capmonster.cloud/createTask{
"clientKey": "YOUR_CAPMONSTER_CLOUD_API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://gt4.geetest.com/",
"gt": "54088bb07d2df3c46b79f80300b0abbe",
"version": 4,
"initParameters": {
"riskType": "slide"
}
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId": 0,
"status": "ready",
"solution": {
"captcha_id": "f5c2ad5a8a3cf37192d8b9c039950f79",
"lot_number": "bcb2c6ce2f8e4e9da74f2c1fa63bd713",
"pass_token": "edc7a17716535a5ae624ef4707cb6e7e478dc557608b068d202682c8297695cf",
"gen_time": "1683794919",
"captcha_output": "XwmTZEJCJEnRIJBlvtEAZ662T...[cut]...SQ3fX-MyoYOVDMDXWSRQig56"
}
}
// npm install playwright @zennolab_com/capmonstercloud-client
import { chromium } from "playwright";
import {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest
} from "@zennolab_com/capmonstercloud-client";
const CAPMONSTER_API_KEY = "YOUR_CAPMONSTER_API_KEY";
async function solveGeetestV4(pageUrl) {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({ viewport: null });
const page = await context.newPage();
let detected = null;
let solutionObj = null;
// 1. 拦截 /load 响应(获取 captcha_id、challenge 等参数)
page.on("response", async (response) => {
const url = response.url();
if (!url.startsWith("https://gcaptcha4.geetest.com/load?")) return;
const params = new URLSearchParams(url.split("?")[1] || "");
const captchaId = params.get("captcha_id");
const challenge = params.get("challenge");
const captchaType = params.get("captcha_type");
if (captchaId && challenge) {
detected = { captchaId, challenge, captchaType };
console.log("Detected GeeTest v4 load:", detected);
}
});
// 2. 打开并加载页面
console.log("Opening page:", pageUrl);
await page.goto(pageUrl, { waitUntil: "domcontentloaded" });
// 3. 等待并捕获 /load 请求
console.log("Waiting for GeeTest /load...");
while (!detected) {
await page.waitForTimeout(500);
}
// 4. 将任务发送到 CapMonster Cloud
console.log("Sending task to CapMonster...");
const cmc = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: CAPMONSTER_API_KEY })
);
const task = new GeeTestRequest({
websiteURL: pageUrl,
gt: detected.captchaId,
challenge: detected.challenge,
version: "4",
initParameters: {
riskType: detected.captchaType || "slide"
}
});
const solveRes = await cmc.Solve(task);
const sol = solveRes.solution || solveRes;
solutionObj = {
captcha_id: sol.captcha_id || detected.captchaId,
captcha_output: sol.captcha_output,
lot_number: sol.lot_number,
pass_token: sol.pass_token
};
console.log("Got solution from CapMonster:", solutionObj);
// 5. 在 /verify 请求中填写对应参数以获得成功响应
await page.route("https://gcaptcha4.geetest.com/verify*", async (route) => {
console.log("Intercepted /verify, injecting fake success...");
const body = `geetest_${Date.now()}(${JSON.stringify({
status: "success",
data: {
result: "success",
seccode: {
captcha_id: solutionObj.captcha_id,
captcha_output: solutionObj.captcha_output,
lot_number: solutionObj.lot_number,
pass_token: solutionObj.pass_token
}
}
})})`;
await route.fulfill({
status: 200,
contentType: "application/javascript",
body
});
});
// 6. 模拟用户操作(例如点击验证码按钮)
console.log("Waiting for captcha interaction...");
await page.waitForTimeout(3000);
// 验证请求示例:
try {
await page.click('.geetest_btn'); // 验证码按钮
console.log("Clicked captcha button");
} catch {
console.log("Captcha button not found");
}
// 有时需要手动调用 verify():
await page.evaluate(() => {
if (window.initGeetest4 && typeof verify === "function") {
verify();
}
});
console.log("Waiting for verification request...");
await page.waitForTimeout(3000);
await browser.close();
return { detected, solution: solutionObj };
}
(async () => {
const url = "https://example.com"; // 替换为实际使用 GeeTest v4 的页面地址
const res = await solveGeetestV4(url);
console.log("FINISHED:", res);
})();
1. 注册或登录你的 GeeTest 账号。
2. 进入 Captcha Dashboard,选择 Behavior Verification v4:

3. 在控制台中点击 + Create application。
4. 填写 APP/website name(将使用验证码的网站或应用名称)、Address(将部署验证码的网站主域名,例如 https://example.com)、Industry(网站所属行业,如 “E-commerce”、“Social Media” 等),然后点击 Confirm。
5. 在刚创建的应用右侧点击 Add events。设置 Event——验证码实际使用场景的名称,如 login、register 等;Device——使用平台(如 Web/Wap);Business types——验证码应用场景类型(例如 Sign-up / Sign-in —— 注册 / 登录)。然后点击 Add。
6. 此时,你将在控制台中看到该验证码的 ID(在前端和后端均会用到)以及 Key(在后端用于验证):

7. 接入前端部分
先引入脚本:
<script src="https://static.geetest.com/v4/gt4.js"></script>然后初始化 CAPTCHA:
initGeetest4(
{ captchaId: "Your CaptchaId" },
function (captcha) {
captcha.appendTo("#captcha"); // 插入到页面元素中
}
);重要提示:
<!-- 引入 CAPTCHA 脚本 -->
<script src="https://static.geetest.com/v4/gt4.js"></script>
</head>
<body>
<h1>CAPTCHA Demo</h1>
<!-- CAPTCHA 容器元素 -->
<div id="captcha"></div>
<script>
// 初始化 CAPTCHA
initGeetest4(
{
captchaId: "YOUR_CAPTCHA_ID" // 替换为你的 CaptchaId
},
function (captcha) {
// 将 CAPTCHA 渲染到指定页面元素中
captcha.appendTo("#captcha");
// 在这里可以处理验证成功后的逻辑
captcha.onSuccess(function() {
const validate = captcha.getValidate();
console.log("CAPTCHA passed!", validate);
// 在这里可以向服务器发送 validate 请求进行校验
});
}
);
</script>
8. 配置后端逻辑。
当前端用户通过 CAPTCHA 后,会生成一组参数。你需要将这些参数发送到后端,并通过 GeeTest 提供的二次验证 API 进行校验,以确认本次验证是有效的。
二次验证 API:
http://gcaptcha4.geetest.com/validate主要请求参数
{
"status": "success",
"result": "success",
"reason": "",
"captcha_args": {
"used_type": "slide",
"user_ip": "127.0.0.1",
"lot_number": "4dc3cfc2cdff448cad8d13107198d473",
"scene": "anti crawler",
"referer": "http://127.0.0.1:8077/"
}
}<?php
$captcha_id = 'YOUR_CAPTCHA_ID';
$captcha_key = 'YOUR_CAPTCHA_KEY';
$api_server = 'http://gcaptcha4.geetest.com';
// 从前端接收参数
$lot_number = $_POST['lot_number'] ?? '';
$captcha_output = $_POST['captcha_output'] ?? '';
$pass_token = $_POST['pass_token'] ?? '';
$gen_time = $_POST['gen_time'] ?? '';
// 生成签名(sign_token)
$sign_token = hash_hmac('sha256', $lot_number, $captcha_key);
// 构造请求数据
$data = [
'lot_number' => $lot_number,
'captcha_output' => $captcha_output,
'pass_token' => $pass_token,
'gen_time' => $gen_time,
'sign_token' => $sign_token
];
// 向二次验证 API 发送请求
$url = $api_server . '/validate?captcha_id=' . $captcha_id;
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
'timeout' => 5
]
];
$context = stream_context_create($options);
$result = @file_get_contents($url, false, $context);
if ($result === FALSE) {
$response = ['login' => 'fail', 'reason' => 'request geetest api fail'];
} else {
$gt_msg = json_decode($result, true);
if ($gt_msg['result'] === 'success') {
$response = ['login' => 'success', 'reason' => $gt_msg['reason']];
} else {
$response = ['login' => 'fail', 'reason' => $gt_msg['reason']];
}
}
echo json_encode($response);
?>
如果你接手了一个已经集成了验证码或其他防护系统的网站,但又无法访问其代码,也不用担心!要判断实际使用了哪种技术其实并不难。为了核实其是否正常工作,你可以在隔离的测试环境中使用CapMonster Cloud识别服务,确保令牌处理机制和校验逻辑都运行正常。
对于GeeTest CAPTCHA v4,只需识别出所用的系统,观察其行为,并确认防护是否正常工作即可。本文演示了如何识别 GeeTest CAPTCHA v4,以及到哪里查找其接入或重新配置的说明文档,从而帮助你自信地维护防护方案并掌控其运行情况。