Use Cases

CAPTCHA 供应商如何检测自动化(QA 编辑视角)

安全范围: 本指南仅适用于你自有或经授权的 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 集成。

该文章已禁用评论。