Tutorials

在 QA 中用 BeautifulSoup 与 CaptchaAI 检视自有 HTML

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

该文章已禁用评论。