GeeTest CAPTCHA v3
和 CapMonster Cloud

验证码求解、网站集成与测试。

GeeTest CAPTCHA v3解决方案的定价

验证码
价格 (USD)
$ 1.20
1000 代币
接手一个已经部署 captcha 或其他防护的站点,却无法访问源代码?此时最关心的是使用了哪种方案、配置是否正确以及如何测试。

在本文中,我们尽量回答了所有关键问题。要开始解决问题,第一步是确定当前使用的是哪种防护系统。为此,您可以查看常见验证码与反机器人防护系统列表,其中提供了可视化示例和关键特征,帮助您快速判断自己正在使用哪一种方案。

如果您发现自己的网站使用的是 GeeTest CAPTCHA v3,下一步就是更深入地了解它的特性和具体工作方式。在本文中,您还可以查看 GeeTest CAPTCHA v3 的接入说明,以便彻底弄清它在您的网站上是如何运行的。这样一来,您不仅能更好地理解当前的防护机制,还可以更合理地规划后续的维护和支持。

什么是 GeeTest CAPTCHA v3
什么是 GeeTest CAPTCHA v3

GeeTest CAPTCHA v3 是一种用于保护网站免受可能对资源造成损害的自动化操作的安全系统。它可以区分真实用户和机器人,从而确保网站的安全性和稳定运行。

Background
GeeTest CAPTCHA v3 示例
Intelligent mode
Intelligent mode
对用户的验证主要基于其在网站上的行为和交互,而无需额外完成显式的验证任务。
Slide CAPTCHA
Slide CAPTCHA
需要拖动的滑块,用来完成拼图或对齐图片中的某个元素。
Icon CAPTCHA
Icon CAPTCHA
按照指定顺序选择图片。
Space CAPTCHA
Space CAPTCHA
将图形拖动到图片中的正确位置。

如何通过 CapMonster Cloud 解决 GeeTest CAPTCHA v3

测试包含 GeeTest CAPTCHA v3 的表单时,常常需要确认 captcha 是否集成正确并工作正常。

你可以手动验证站点上的 captcha。

  • 打开表单页面,确认 captcha 能够显示。
  • 尝试在不解题的情况下提交——服务器应返回错误。
  • 解题成功后,表单应顺利提交。

若想自动解题,可以使用 CapMonster Cloud 等服务,它会接收验证码参数、在服务器中解析并返回可直接使用的 token。把 token 注入表单即可无需人工操作通过验证。

通过 CapMonster Cloud API 工作的一般流程:

创建任务创建任务
arrow
发送 API 请求发送 API 请求
arrow
获取结果获取结果
arrow
将 token 应用到页面将 token 应用到页面
arrow
使用现成库识别 GeeTest CAPTCHA v3
CapMonster Cloud 提供了适用于 PythonJavaScript(Node.js)和 C# 的现成库,方便集成与使用。
Python
JavaScript
C#
求解、填入 token 并提交表单
下面是一个在 Node.js 中实现完整验证码识别流程的示例,适用于你的网页。可选方案包括:使用 HTTP 请求获取 HTML 与验证码参数,发送答案并处理结果;或者借助自动化工具(例如 Playwright),打开页面,等待验证码加载,发送参数(测试时可以发送正确或错误的数据),通过 CapMonster Cloud 客户端获取解题结果,将 token 写入表单并查看最终效果。
python
// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium

import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, GeeTestRequest } from '@zennolab_com/capmonstercloud-client';

const API_KEY = 'your_capmonster_cloud_api_key';
const DEMO_PAGE = 'https://example.com';

(async () => {
  const browser = await chromium.launch({ headless: false });
  const page = await browser.newPage();

  console.log('正在打开页面……');
  await page.goto(DEMO_PAGE, { waitUntil: 'networkidle' });

  console.log('正在获取验证码参数……');
  const init = await page.evaluate(async () => {
    // 向服务器发送请求以获取 GeeTest 的 init-params 参数,请将此处替换为你的接口地址
    const r = await fetch(`/api/v1/example/gee-test/init-params?t=${Date.now()}`);  
    return r.json();
  });
  console.log('Init params:', init);

  console.log('正在为 CapMonster Cloud 创建任务……');
  const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));
  const solRaw = await cmc.Solve(new GeeTestRequest({ websiteURL: DEMO_PAGE, gt: init.gt, challenge: init.challenge }));
  const sol = solRaw.solution || solRaw;
  console.log('验证码求解结果:', sol);

  console.log('将求解结果写入表单隐藏字段……');
  await page.evaluate(s => {
    ['challenge','validate','seccode'].forEach(n => {
      const el = document.querySelector(`input[name="geetest_${n}"]`);
      if(el) el.value = s[n];
    });
  }, sol);

  await page.click('button[data-action="test_action"]'); // 替换为你自己的值
  console.log('向服务器发送 verify 校验请求……');
  const result = await page.evaluate(async () => {
    const payload = {
      geetest_challenge: document.querySelector('input[name="geetest_challenge"]')?.value,
      geetest_validate: document.querySelector('input[name="geetest_validate"]')?.value,
      geetest_seccode: document.querySelector('input[name="geetest_seccode"]')?.value
    };
    // 替换为你自己的值
    const r = await fetch('/api/v1/example/gee-test/verify', { 
      method:'POST', 
      headers:{'Content-Type':'application/json'}, 
      body: JSON.stringify(payload) 
    });
    return r.json();
  });

  console.log('验证码校验结果:', result);

  await page.waitForTimeout(3000);
  await browser.close();
})();
如何将 GeeTest CAPTCHA v3 接入自己的网站
为了充分了解验证码在你的网站中的工作方式、验证逻辑,以及如何重新接入或重新配置,我们建议你认真阅读本节内容。这里对保护机制的接入流程进行了说明,帮助你快速掌握所有细节。

1. 注册或登录你的 GeeTest 账号

2. 进入 Captcha Dashboard,选择 CAPTCHA v3

HowTo Connect image 1

3. 点击 +New Captcha 创建新的验证码。填写验证码名称(例如产品名或项目名)、将要集成验证码的网站 URL,并选择验证码的使用场景(例如 登录 / 注册 / 找回密码 等)。

4. 你将获得唯一的 CAPTCHA IDKEY,可以在安全面板中进行配置。

HowTo Connect image 2

5. 配置服务器端(Server SDK):

服务器会与两个 API 交互:

  • API1 —— 初始化(创建 challenge)
  • API2 —— 在用户通过验证码后对结果进行验证

php
<?php
header('Content-Type: application/json');

const CAPTCHA_ID = '07df3141a35**********19a473d7c50';
const CAPTCHA_KEY = '543b19036ef********8e07d121b81e9';

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

function getJson($url) {
    $res = @file_get_contents($url);
    return $res ? json_decode($res, true) : null;
}

// API1:初始化
if ($path === '/register') {
    $data = getJson("https://api.geetest.com/register.php?gt=" . CAPTCHA_ID . "&json_format=1");
    echo json_encode($data ? [
        'gt' => CAPTCHA_ID,
        'challenge' => $data['challenge'],
        'success' => $data['success'] === 1,
        'new_captcha' => true
    ] : ['success' => 0]);
    exit;
}

// API2:校验
if ($path === '/validate' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $req = json_decode(file_get_contents('php://input'), true);
    $data = getJson("https://api.geetest.com/validate.php?" . http_build_query([
        'seccode' => $req['geetest_seccode'] ?? '',
        'challenge' => $req['geetest_challenge'] ?? '',
        'gt' => CAPTCHA_ID,
        'json_format' => 1
    ]));
    echo json_encode(['success' => !empty($data['seccode'])]);
    exit;
}

http_response_code(404);
echo json_encode(['error' => 'Not found']);

6. 接入客户端(Client SDK):

在客户端加载 gt.js,并调用 initGeetest,将服务器(API1)返回的参数传入。下面是一个使用 ajax 的示例:

javascript
ajax({
    url: "https://example.com/register",
    type: "get",
    dataType: "json",
    success: function (data) {
        initGeetest({
            gt: data.gt,
            challenge: data.challenge,
            offline: !data.success,
            new_captcha: true
        }, function (captchaObj) {
            captchaObj.appendTo("#captcha");

            captchaObj.onSuccess(function () {
                const result = captchaObj.getValidate();
                ajax({
                    url: "https://example.com/validate",
                    type: "post",
                    contentType: "application/json",
                    data: JSON.stringify(result),
                    success: function(res) {
                        if (res.success) alert('CAPTCHA passed');
                        else alert('CAPTCHA failed');
                    }
                });
            });
        });
    }
});

功能验证

请确认以下几点:

  • /register 接口会返回 challenge
  • 验证码在页面上正常显示
  • 用户通过验证码后,可以在浏览器控制台中看到对 /validate 的请求
  • 服务器返回 "success": true

Failback(降级/本地模式)

如果 GeeTest 服务器不可用:

  • 客户端会收到 success: false
  • 验证码会切换至 本地模式(在不连接 GeeTest Cloud 的情况下工作)。如需测试,只需故意设置错误的 CAPTCHA_ID(例如 123456789)。

Background
可能的错误与调试
Bug Icon
参数无效
验证码未显示,或返回 invalid-gt / invalid-challenge 错误。请检查是否为当前页面使用了最新的 gtchallenge 值。
Bug Icon
求解超时
未能在预期时间内获得验证码的求解结果。使用自动化解题服务(如 CapMonster)时,请适当增加超时时间。
Bug Icon
字段为空
challengevalidateseccode 未传递到页面。请确保这些值已正确写入表单的隐藏字段。
Bug Icon
响应 success=false
token 已过期、被重复使用或为伪造。为便于排查,请开启请求日志记录,并检查服务器返回的各字段(例如使用 CapMonster 或自建校验服务时的 error-codes 字段)。
验证防护的可靠性
集成完成后,务必确认系统确实能够抵御自动化行为。
安全与优化建议
<span class="font-bold">仅在服务器端保存验证码密钥(secret KEY)</span>,不要将其暴露到前端。
在验证流程中记录(log)错误代码(例如 <span class="font-bold">error-codes</span> 或响应体中的相关字段),以便分析验证失败的原因。
如许可证或内部规范有要求,请在表单底部添加指向 <span class="font-bold">隐私政策</span> 和 <span class="font-bold">GeeTest 使用条款</span> 的链接。
结论

如果你接手了一个已经集成了验证码或其他防护系统的网站,但又无法访问其代码,也不用担心!要判断实际使用了哪种技术其实并不难。为了核实其是否正常工作,你可以在隔离的测试环境中使用CapMonster Cloud识别服务,确保令牌处理机制和校验逻辑都运行正常。

对于GeeTest CAPTCHA v3,只需识别出所用的系统,观察其行为,并确认防护是否正常工作即可。本文演示了如何识别 GeeTest CAPTCHA v3,以及到哪里查找其接入或重新配置的说明文档,从而帮助你自信地维护防护方案并掌控其运行情况。

Conclusion

关于 GeeTest CAPTCHA v3 的常见问题

challenge 值的有效期很短——通常不到两分钟。将过期的 challenge 传给 createTaskERROR_TOKEN_EXPIRED 最常见的原因。每次调用 createTask 前,请尽快从网站的 init-params 端点获取新的 challenge——不要缓存,不要重复使用。

请注意:返回 ERROR_TOKEN_EXPIRED 的任务仍会计入计费。

轮询 https://api.capmonster.cloud/getTaskResult 会返回包含三个字段的 solution 对象(值始终不同):

json
{
  "solution": {
    "challenge": "0f759dd1ea6c4wc76cedc2991039ca4f23",
    "validate": "6275e26419211d1f526e674d97110e15",
    "seccode": "510cd9735583edcb158601067195a5eb|jordan"
  }
}

在触发表单提交前,请分别映射到隐藏字段 geetest_challengegeetest_validategeetest_seccode。可使用 Playwright、Puppeteer、Selenium 或普通 HTTP 客户端注入。

注意:请按固定间隔轮询,每个任务不要超过 120 次请求,以免账户被封。根据系统负载,响应通常在 10 到 30 秒内返回。

要理解自动化逻辑,建议先手动找到这些参数:

  1. 打开 DevTools → Network 标签页。
  2. init-params 筛选并刷新页面。
  3. JSON 响应将同时包含 gtchallenge。自动化需要拦截的就是该端点。

使用 Playwright 或其他无头浏览器自动化时,在网络层拦截 init-params 响应——比 DOM 解析更快、更可靠。然后解析 JSON 负载中的 gtchallenge

现成的提取脚本见 CapMonster Cloud 文档

当 GeeTest v3 的验证服务器不可达时,会启用离线/旁路模式。此模式下小部件仍会渲染,用户仍可交互,但网站的客户端和服务器端验证在本地处理。

不影响自动解决工作流。

可以。在需要验证表单提交、QA 场景或负载测试行为且无需人工操作时,CapMonster Cloud 可用于 GeeTest CAPTCHA v3 自动化工作流。

每个任务使用新的 gtchallenge,将 challengevalidateseccode 注入对应字段,并监控目标环境的拒绝率。最新价格见 价格页面