安全范围: 本指南仅适用于你自有或经授权的 QA、staging 与预发布环境。内容覆盖针对你自己 CAPTCHA 集成的诊断、测试与可观测性模式 — 不涉及第三方站点或未授权流程。
先给结论:运价用例不该因为一个 CAPTCHA 被标成 skip。在 staging 把识别接进用例即可——提取 sitekey,拿到 token,写回表单字段,请求照常打到运价后端,报价与附加费逻辑就都在覆盖里。
第一步:先造一批固定的虚拟运单
生产订单不能跑回归:数据会变,断言没有基线。改用写死的合成运单,覆盖计费分叉的路径:同城小件走最低计费重量;跨省重货走 max(实重, 体积重);跨境件带 HS 编码;缺邮编或超尺寸走报错路径。国内再加一条:偏远地区派送费单独计费,基线里放一个新疆地址,否则这一档永远测不到。
第二步:在 staging 里把 token 拿到手
把 widget 的 data-sitekey 连同 pageurl 提交给 CaptchaAI,轮询结果后写入对应字段:reCAPTCHA v2 是 g-recaptcha-response,Turnstile 是 cf-turnstile-response。API Key 走环境变量。
国内有个特有干扰项:reCAPTCHA 依赖 Google 托管脚本,境内加载不稳。用例在境外 CI 通过、自建 runner 超时,多半是 widget 没渲染,不是识别失败。
成本按线程算:BASIC $15/月、5 线程,STANDARD $30/月、15 线程,套餐内不限次。发版当天集中跑用例是脉冲负载,按并发上限估算。完整流程见 CaptchaAI 快速入门。
第三步:断言要落在后端,不是页面上
用例的价值在断言:状态码 200、响应体是合法 JSON;档位数量与基线一致;每档运价为数值且大于 0;同一运单连提两次结果一致。
第四步:日志要能重放整条链路
用例红了能不能快速定位,取决于运行留下了什么。落一份结构化日志:
- token 耗时与 HTTP 响应码分开记,区分识别慢还是承运商慢;
- 任务编号与队列深度,看并发是否排队;
- 一个 correlation id,用 OpenTelemetry 串起浏览器侧、识别调用与运价接口。
示例:最小识别调用
可直接放进用例 setup:
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()
排错速查表
| 问题 | 处理方式 |
|---|---|
| reCAPTCHA 脚本超时 | 确认 runner 能否访问 Google 资源 |
ERROR_NO_SLOT_AVAILABLE |
线程跑满,按指数退避重试 |
| 后端拒绝 token | 核对 action / sitekey / secret |
| 运价与页面不一致 | 检查附加费字段是否漏传 |
| 找不到 widget | 检查选择器与等待时机 |
前提是运价页归你所有,采集仅限自有系统,符合网络安全法与数据安全法。
常见问题
跑一次回归要多少识别调用?
运单数 × 承运商数,套餐内不限次。
reCAPTCHA v2 和 Turnstile 接入差别大吗?
只差 method 参数与 token 字段名。参见 reCAPTCHA v2 识别 与 Turnstile 识别。
国内物流站常见的滑块验证码支持吗?
支持 GeeTest(极验)v3,v4 即将支持。hCaptcha 与 FunCaptcha 不支持;CaptchaFox、Friendly Captcha、Lemin 为测试版。
API Key 可以写在用例代码里吗?
不可以。用 CI secret 或 vault 注入,进过仓库的 key 要轮换。
安全相关指南
- CaptchaAI 快速入门
- 授权 CAPTCHA QA 测试
- 表单 endpoint 测试
- 浏览器失败而 API 通过的调试
- reCAPTCHA v2 识别
- Turnstile 识别
- GeeTest v3 识别
用 CaptchaAI 把运价链路纳入回归。