BatchMortal:绕过cf盾,实现雀魂牌谱批量提交分析的项目说明待补充。
我构建了
- 获取玩家记录
- 构造牌谱 URL
- 自动提交分析
- 等待并提取结果
- 持久化保存结果
- 生成可视化报告
模块划分
main.py:主入口,负责参数解析、任务组织和流程调度batchmortal/api.py:负责玩家搜索、记录拉取和牌谱 URL 构造batchmortal/browser.py:负责浏览器自动化、提交协调、失败恢复batchmortal/results.py:负责结果写入、去重和已处理任务识别batchmortal/visualize.py:负责图表和报告生成
亮点
1. 做通了完整链路
项目将一整条手工流程完全打通:
- 查玩家
- 拉牌谱
- 打开分析网站
- 提交分析
- 等待结果
- 保存结果
- 输出报表
2. 重点解决了
项目把精力集中在了最现实的问题上:
Cloudflare Turnstile验证- 提交节奏控制
- 浏览器页面失效
- token 超时与拒绝
- 远端站点限流
- 重试与冷却策略
3. 数据的结构化处理
- 牌谱链接
- 模式
- 开始结束时间
- rating
- AI 一致率
- 温度
- 对局长度
- 玩家 ID
- 审查耗时
- 结果截图路径
设计考虑
1. 稳定性优先
项目提供了 3 种运行模式:
- 默认模式:单窗口串行,最稳
--prewarm-standby:实验性的双窗口轮转--unsafe-parallel-review:高风险并发,不推荐
默认模式即自然思路单窗口串行运行,运行若干示例数据发现,每两个任务间有较大的空档期,因此考虑了线程池加速技术。而cf的验证策略是根据系统ip来的,对于单ip系统代理而言多线程反而降低了其自然访问验证速度,推荐搭配代理池使用(作者也没有用过/(ㄒoㄒ)/~~), 而后研制出了单系统代理目前最优解:开2个窗口,串行运行但将静默资源消耗放在后台运行:A 窗口运行完毕后,返回分析页,立刻切换到 B 窗口,此时 B 窗口的验证已过,只需要消耗数十毫秒的表单填写时间即可。
()🙏升天🙏()
2. 重复执行成本
项目考虑了重复运行成本:
考虑了批量场景和重跑成本:
- 读取已有结果文件
- 根据 UUID 识别已完成任务
- 跳过已成功处理的牌谱
- 避免重复写入
3. 考虑了部署与使用门槛
项目提供了配置模板(yaml/toml),并支持配置文件覆盖命令行参数。对于经常重复使用的人来说,这点设计显然更加人性化^^。
同时,项目还加入了 uc_driver 自动安装逻辑,减少了 SeleniumBase 环境准备的摩擦。
我做了
已完成
- 支持通过玩家昵称搜索账号
- 支持直接使用
account_id - 支持根据账号拉取多种 mode 的对局记录
- 自动构造雀魂牌谱 URL
- 自动打开 Mortal 分析页面
- 自动填写表单并提交分析
- 处理 Turnstile token 等待与恢复
- 检测 captcha/token 被拒绝的情况
- 检测 rate limit 和提交失败
- 支持失败重试
- 支持浏览器异常后的恢复
- 支持代理和 headless 模式
- 支持
csv和xlsx输出 - 支持批量写入优化
- 支持跳过已经处理过的 UUID
- 支持记录开始结束时间等元数据
- 支持保存结果截图
- 支持 YAML/TOML 配置文件
- 支持生成 HTML 图表
- 支持生成 PNG 报告截图
- 将项目重构为包结构,提升可维护性
尚未完全展开
- 增加常见昵称与
account_id的映射词典 - 继续补充 issue 中的真实需求
- 提升测试覆盖率
- 继续打磨稳定性与使用体验
项目的意义
确实帮到了一些人
我也爽😀
Why It Matters
- TODO