安全范围: 本指南仅适用于你自有或经授权的 QA、staging 与预发布环境。内容覆盖针对你自己 CAPTCHA 集成的诊断、测试与可观测性模式 — 不涉及第三方站点或未授权流程。
BeautifulSoup 不负责识别验证码,它只把 HTML 解析成可以取值的结构;真正完成识别的是 CaptchaAI。把两者接进同一条 QA 流水线,不启动浏览器也能验证 staging 页面的验证码 widget 是否渲染正常、sitekey 是否正确、后端是否接受识别后的 token。刚换过 sitekey 或升级过 widget 版本时,尤其该测一遍。
定位页面里的验证码 widget
在自己保存的 staging HTML 上用稳定选择器抓取 widget:reCAPTCHA 常见 .g-recaptcha/[data-sitekey],Turnstile 用 .cf-turnstile。选择器写宽一点更稳,避免容器改名导致测试失败。
用 CaptchaAI API 完成识别
把 sitekey 连同 staging URL 提交到 in.php,按固定间隔轮询 res.php。每 5 秒查一次通常够用,查太勤只会增加没必要的请求量。
把 token 提交给后端验证
把 token 提交给内部 QA endpoint,核对是否有效、是否过期、action 与 sitekey 是否匹配——只拿到 token 证明不了后端真的认它。
完整示例:一次 QA 调用
下面的 Python 示例展示了在自有 staging 环境中通过 CaptchaAI 测试 CAPTCHA widget 的最小流程。
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()
国内 CI 里常用清华 TUNA 镜像装依赖(-i https://pypi.tuna.tsinghua.edu.cn/simple),这段代码不依赖特定镜像源。
采集运行日志,让排查更快
为每次 QA 运行生成结构化日志:采集 token 耗时、HTTP 状态码、任务编号、队列深度,用分布式追踪(比如 OpenTelemetry)串联 correlation id。基于一个 id 重放场景,排查时间至少能砍半。
常见故障与处理方式
| 问题 | 处理方式 |
|---|---|
| 测试找不到 widget | 检查 staging 选择器与页面加载等待时机 |
CaptchaAI 返回 ERROR_NO_SLOT_AVAILABLE |
在内部 pipeline 里按指数退避重试 |
| 后端 QA 拒绝 token | 核对 action、sitekey、secret 是否与真实配置一致 |
| 端到端耗时偏高 | 在自有环境重新测量,排查内部网络抖动 |
上线前检查清单
- 测试范围限定在自己的应用或经授权的资源。
- CaptchaAI key 存放在 CI secret 仓库或 vault,绝不进源代码。
- 记录每次调用的耗时与响应状态码。
- 给瞬时错误配置幂等重试并设上限。
- 测试可在 CI 里可复现地反复跑。
常见问题
这套流程会不会影响生产流量?
不会。示例请求都指向 staging.example.com 或你自己的 QA 域名,请在 staging 副本里复现生产一致的 CAPTCHA 配置。
API key 能不能直接写进代码里?
不能。用 CI secret 管理器、环境变量或 vault 注入,已提交进仓库的 key 要立刻轮换。
遇到瞬时错误应该怎么重试?
幂等重试配合指数退避(比如 1s、2s、4s),并设上限。网络错误、5xx、ERROR_NO_SLOT_AVAILABLE 都适合重试;持久性鉴权错误不应重试。
相关安全测试资源
- CaptchaAI 快速入门
- 授权 CAPTCHA QA 测试
- 自有表单的 CAPTCHA endpoint 测试
- 浏览器测试失败但 API 测试通过的调试
- 使用 API 识别 reCAPTCHA v2
- 使用 API 识别 Cloudflare Turnstile
- 使用 API 识别 GeeTest v3
在自有环境中使用 CaptchaAI 验证你的 CAPTCHA 集成。