安全范围: 本指南仅适用于你自有或经授权的 QA、staging 与预发布环境。内容覆盖针对你自己 CAPTCHA 集成的诊断、测试与可观测性模式 — 不涉及第三方站点或未授权流程。
一次 CAPTCHA 弹窗很少由单一原因触发,而是 IP 信誉、请求头、浏览器指纹、行为与会话等信号叠加超阈值的结果。本文从 QA 编辑视角拆解这些信号,理解它们为什么误伤真实用户,以及如何在自有 staging 中量化触发率。
检测分层:供应商到底在看什么
反机器人系统把多层信号加权打分,主要有五类:
- IP 与请求速率:单 IP 请求过快,或来自数据中心段。
- HTTP 请求头:默认库的
User-Agent、缺失Accept-Language/Referer、没有 session cookie。 - 浏览器指纹:WebGL、canvas、插件、时区——headless 与真人有系统性差异。
- 行为分析:真人有随机路径与鼠标波动,脚本则是顺序访问、精确坐标点击。
- 会话与 cookie:回访时 cookie 是否连贯、是不是全新会话。
单独一层可能正常,叠加到阈值才触发验证码。
reCAPTCHA v3 的分数怎么来的
reCAPTCHA v3 无感运行,把上述信号综合成 0.0–1.0 的信任分数:
| 分数区间 | 判定 | 站点动作 |
|---|---|---|
| 0.7 – 1.0 | 大概率真人 | 直接放行 |
| 0.3 – 0.7 | 不确定 | 可能弹验证码 |
| 0.0 – 0.3 | 大概率机器人 | 拦截或弹验证码 |
低分时站点可能改抛 reCAPTCHA v2 挑战;Cloudflare 的灰色流量则拿到 Turnstile 组件。CaptchaAI 对 reCAPTCHA v2/v3、Turnstile(turnstile)与挑战页(cloudflare_challenge)都提供识别接口。
国内验证码格局:为什么你遇到的是极验
国内站点多用 GeeTest(极验)、网易易盾、腾讯防水墙,reCAPTCHA 与 Turnstile 多见于海外站点。CaptchaAI 仅支持 GeeTest v3,不覆盖易盾、防水墙或阿里云验证码。涉及数据采集时也要守住网络安全法、数据安全法、PIPL 与 robots 协议。
检测对真实用户的影响与 staging 度量
过激的检测策略也会误伤真人、压低转化率,因此要把真实触发率当成 UX 指标度量。在自有 staging 中,CaptchaAI 让你对着复现的 CAPTCHA 配置反复跑端到端流程,把触发率、耗时与失败原因沉淀成数据。下面是最小示例:
import os
import requests
API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL'] # 例如 https://staging.example.com/qa-login
QA_SITE_KEY = os.environ['QA_SITE_KEY']
def submit_qa_recaptcha() -> str:
payload = {
'clientKey': API_KEY,
'task': {
'type': 'NoCaptchaTaskProxyless',
'websiteURL': QA_PAGE_URL,
'websiteKey': QA_SITE_KEY,
},
}
response = requests.post(
'https://api.captchaai.com/createTask',
json=payload,
timeout=30,
)
response.raise_for_status()
return response.json()['taskId']
def fetch_qa_result(task_id: str) -> dict:
payload = {'clientKey': API_KEY, 'taskId': task_id}
response = requests.post(
'https://api.captchaai.com/getTaskResult',
json=payload,
timeout=30,
)
response.raise_for_status()
return response.json()
为每次运行生成结构化日志(token 耗时、响应码、任务编号、队列深度),用分布式追踪(如 OpenTelemetry)关联 correlation id,即可基于单一 id 重放场景。
排查测试中的常见问题
| 问题 | 处理方式 |
|---|---|
| 测试找不到 widget | 检查 staging 中的选择器与等待时机 |
CaptchaAI 返回 ERROR_NO_SLOT_AVAILABLE |
按指数退避重试 |
| 后端 QA 拒绝 token | 核对 action / sitekey / secret |
| 端到端时延偏高 | 重新测量并检查网络抖动 |
常见问题
为什么真实用户也会频繁遇到 CAPTCHA?
因为检测是多层信号叠加打分,而非针对个人。共用出口 IP、清空过 cookie 或用隐私浏览模式的真人,都可能在某几层上"看起来像脚本"。
在国内测试 reCAPTCHA 时脚本卡住,是被检测了吗?
不一定。reCAPTCHA 依赖 Google 托管脚本,国内网络下未必能加载——卡住常常是脚本没拉到,而非被判为机器人。可在 staging 拉长超时来区分。
遇到 ERROR_NO_SLOT_AVAILABLE 该怎么办?
按指数退避重试(例如 1s、2s、4s)并设上限;网络错误、5xx 与该错误都适合重试,持久性鉴权错误不应重试。
安全相关指南
- CaptchaAI 快速上手
- 授权范围内的 CAPTCHA 测试
- 自有表单的 CAPTCHA 接口测试
- 浏览器失败但 API 通过时的排查
- 用 API 识别 reCAPTCHA v2
- 用 API 识别 Cloudflare Turnstile
- 用 API 识别 GeeTest v3
请在自有环境中使用 CaptchaAI 验证 CAPTCHA 集成。