← 返回首页

雪球调仓抓取器开发实录:与 WAF 过招,稳字当头 🚀

做量化跟投,第一步是把雪球组合的调仓记录稳定抓下来喂给 QMT。2026 年 9 月雪球上了阿里云 WAF,这套带 GUI 的抓取器就是围绕「怎么又稳、又不误下单」重新设计的。😀

配图

架构核心:抓取与交易解耦

  • ❌ 不在 QMT 里跑浏览器 —— QMT 自带 Python 环境脆弱,装 playwright 风险高
  • ✅ 独立抓取进程 + JSON 文件交换,QMT 策略零第三方依赖,只管读文件下单
  • 抓取挂了?策略按旧数据 + record_key 去重,不会误下单
WAF 对抗的三个实测结论
  1. 纯 requests 怎么伪装头和 Cookie 都是 400016,acw_sc__v2 必须真浏览器执行 JS 才算得出来
  2. Playwright 持久会话 + 注入 Cookie 后 200 稳定;fetch 必须用同源相对路径 + credentials:'same-origin',并先 goto 组合页过挑战
  3. 只抓第 1 页:连续翻页到第 6 页会撞 WAF 配额墙(返回 200 + JS 挑战脚本,退避重试救不回来),1 页 ≈ 最近 50 个事件 ≈ 2 个月,跟投只关心最新调仓,够用
可靠性设计
  • 安全闸门:解析失败或被拦时拒绝覆盖旧文件 —— 宁可少抓,不可错抓
  • record_key(调仓ID+股票代码)去重;限速 + 被拦自动降频;600s 看门狗防静默卡死
  • 交易日三级降级:QMT 日历 → 节假日表 → 周末规则,判不出来就按交易日 —— 宁可白发请求,绝不整天漏抓
Cookie 最大的坑 💡

决定登录态的是 xq_a_token(14 天),不是 xq_id_token(29 天)!而且不滑动续期、在别处登录还会被提前作废。到期时间藏在 cookie 属性层 Expires,手工复制成字符串就丢了 —— 所以做了「扫码登录一键抓取」:登录成功那一刻顺手记下到期时间,剩余 ≤5 天变橙、≤2 天变红提醒更换,换完自动热重建浏览器会话生效。

一句话总结:用真浏览器过 WAF,用文件交换隔离风险,用「绝不覆盖旧数据」兜住交易安全。👍

💬 评论 (0)

今日还可评论 3 条

还没有评论,来抢沙发吧。