Skip to content

myouo/batchmortal

Repository files navigation

Batch Mortal Analysis

batchmortal 是一个基于 Python 和 SeleniumBase 的批量牌谱分析脚本。它会从 amae-koromo 拉取雀魂对局记录,再自动打开 mjai.ekyu.moe 提交牌谱、等待分析完成,并把结果导出为 xlsxcsv

环境要求

  • Python 3.8+
  • Google Chrome
  • 可访问目标站点的网络环境

安装依赖:

git clone https://github.com/myouo/batchmortal.git cd batchmortal pip install -r requirements.txt

基本用法

python main.py -p <玩家昵称> [选项] # 或者 python main.py -a <数字账号ID> [选项]

使用配置文件(推荐)

你可以通过配置文件来简化命令行输入。在项目根目录下创建一个 config.yamlconfig.toml 文件(或参考 config.default.yaml)。

示例 config.yaml

nickname: "言乾" limit: 10 modes: "12" headless: true save_screenshot: true output: "xlsx"

带配置文件的运行方式:

python main.py

(你也可以通过 python main.py --config my_config.yaml 手动指定配置文件位置。命令行传入的参数会覆盖配置文件中的同名设置。)

常见示例(不使用配置文件):

python main.py -p 言乾 --modes 12 --limit 1 --headless --save-screenshot --output xlsx

参数说明

Target Options (目标参数)

参数 默认值 说明
-p, --player 目标雀魂玩家昵称(必须提供 -p-a
-a, --account-id 直接指定玩家数字账号 ID。当与 -p 同时提供时,实际拉取以 -a 为准,但程序的目标名称仍沿用 -p 提供的昵称。若仅提供 -a,程序会通过 API 尝试获取真实昵称。

Analysis Options (分析参数)

参数 默认值 说明
--limit 10 每个 mode 最多拉取多少条记录
--modes 9 逗号分隔的 mode 列表,例如 9(四人金南),12(四人玉南),16(四人王座南)
--model-tag 4.1b Mortal 分析模型版本
--retry 3 失败条目的重试次数。每次重试都会重新打开分析页并重新提交

Browser & Network Options (浏览器与网络)

参数 默认值 说明
--headless False 后台无界面运行浏览器(强烈推荐)
--proxy 系统代理 指定浏览器代理;不传时尝试自动读取系统代理

Output Options (输出与绘图)

参数 默认值 说明
--output xlsx 导出格式,可选 xlsxcsv(默认xlsx)
--plot none 生成折线图:none, html, png, 或 both。默认不生成
--save-screenshot False 保存分析结果页面截图(举报时可用)

Advanced Submission Options (高级配置)

参数 默认值 说明
--unsafe-parallel-review False 允许并发提交 review。理论上更快,但在单代理环境下通常易失败(已弃用,不推荐)
--submit-interval 6 受控模式下,两次提交之间的最小间隔秒数(已弃用,不推荐)
--submit-cooldown 30 受控模式下,连续失败后的冷却秒数(已弃用,不推荐)
--prewarm-standby False 实验功能。使用两个持久窗口轮流接力,每次只让当前焦点窗口完整处理一条任务(推荐尝试)

General / Legacy Options (通用及历史参数)

参数 默认值 说明
--config 指定配置文件路径(支持 yaml/toml),命令行参数会覆盖配置项
--dry-run False 只拉取并打印牌谱 URL,不启动浏览器
--no-manual-verification False 兼容旧脚本保留参数,当前无作用(已弃用)
--flare-url 兼容旧脚本保留参数,当前无作用(已弃用)

运行模式建议

  • 默认模式:单窗口串行,当前最稳。
  • --prewarm-standby:实验功能。现在表示“双窗口轮转”,不是后台抢跑预热;在单代理环境下不保证比默认串行更快,但值得一试。
  • --unsafe-parallel-review:不推荐在单系统代理环境下使用,通常会增加 Cloudflare/Turnstile 等待和失败率。

推荐先从默认模式开始:

python main.py -p 言乾 --limit 10 --modes 16 --headless

如果你要测试实验性的双窗口轮转:

注意:这是实验路径,建议只在你已经拿到默认串行基线后再做对比测试。

python main.py -p 言乾 --limit 10 --modes 16 --headless --prewarm-standby

绘图模块 (--plot)

使用 --plot htmlboth 将会在产出数据后调用底层的可视化引擎生成 report_<nickname>.html

示例:

python main.py -p "main()" --limit 20 --modes 16 --headless --retry 3 --prewarm-standby --save-screenshot --plot both

report_main__

输出目录

结果默认写入:

results/<nickname>/ 

常见产物包括:

  • results/<nickname>/results.xlsxresults/<nickname>/results.csv
  • results/<nickname>/mode_<id>/<uuid>.png
  • results/<nickname>/mode_<id>/<uuid>_error.png

日志

运行日志会在每条输出前附带当前系统时间,便于定位慢点和错误发生时刻。

说明

  • xlsx 写入逻辑已做批量化优化,但整体耗时通常主要由浏览器提交、Cloudflare Turnstile 和远端分析生成决定。
  • 在只有一个系统代理的情况下,多窗口或多线程通常不会线性提速。

下一步

  • 计划增加常见 id 与match_id的对应词典,以满足大家喜爱的主播/牌手改名而自己不愿意去翻的情景,如:{"火龙果说电影" : "8888621"}(主播名称与account_id的对应) 以便大家使用。
  • anything in issue...?

License

MIT

About

批量分析雀魂牌谱

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages