ticket-purchase 深度分析报告
一句话总结
大麦网抢票赛道的绝对领先者——唯一同时支持 PC(Selenium)和 APP(Appium)双端的开源抢票工具,4 种观演人选择方法 + 5 种提交按钮策略的穷举式容错设计对抗大麦网频繁改版,6.2K Stars 是第二名的 3.5 倍。
值得关注的理由
- 大麦锁定 APP 购票趋势下的唯一 Appium 方案:越来越多热门演出仅限大麦 APP 购买,ticket-purchase 是唯一覆盖 APP 端的开源抢票工具。Appium V2 的
waitForIdleTimeout: 0+ 坐标点击优化是有实战价值的移动端自动化技巧 - 穷举式容错是对抗频繁改版的工程范式:concert.py 1,564 行的核心逻辑中,4 种观演人选择方法和 5 种提交按钮策略的穷举 try-except 链不是烂代码——是在大麦网频繁改版 UI 的现实下,用代码量换可靠性的务实设计
- 「解决个人痛点→意外走红」的开源范本:WECENG 是 Java 后端开发者(其余仓库 Star 总和不到 30),ticket-purchase 纯粹是解决个人抢票需求的副产品。2025 年 9-10 月登上 GitHub Trending 后 16 天涨 1,417 Stars,证明「刚需工具 + 中文生态」的传播力
项目画像
| 维度 | 数据 |
|---|---|
| GitHub | https://github.com/WECENG/ticket-purchase |
| Star / Fork | 6,214 / 1,656 |
| 代码行数 | 2,961 行 Python(35 个文件),核心 concert.py 1,564 行 |
| 项目年龄 | 30 个月(首次提交 2023-10-12) |
| 开发阶段 | 低维护(21 次提交 / 2.5 年,脉冲式更新) |
| 贡献模式 | 个人主导(WECENG 71%,4 位社区贡献者各 1-3 次) |
| 热度定位 | 中等热度(6.2K Stars,大麦抢票赛道 #1,仍有持续 Fork) |
| 质量评级 | 实用性⭐⭐⭐⭐⭐ 代码质量⭐⭐ 维护状况⭐ |
作者视角:为什么存在这个项目
创始人/作者背景
WECENG,低调的 Java 后端开发者,9 个公开仓库中其余 Star 总和不到 30。ticket-purchase 纯粹是解决个人抢票需求的副产品——从代码风格(大量中文注释和 print 调试)看得出这是一个为「自己能用」而非「社区展示」而写的工具。
问题判断
大麦网抢票的核心痛点:热门演出秒售罄 → 手动操作速度不够 → 需要自动化。大麦网频繁改版 UI → CSS 选择器经常失效 → 需要穷举式容错。越来越多演出仅限 APP 购买 → PC 端方案不够 → 需要 Appium 移动端支持。
解法哲学
「穷举对抗不确定性」——不追求优雅的选择器,而是用 4 种观演人选择方法(下拉框/复选框/DOM ID/直接点击)和 5 种提交按钮策略(文本匹配/class 匹配/XPath/兜底扫描)的 try-except 链覆盖所有可能的 UI 变体。这不是过度工程——是在大麦网月度改版频率下的唯一可靠策略。
核心价值提炼
创新之处
-
双端覆盖(PC + APP)(新颖度 4/5 | 实用性 5/5 | 可迁移性 3/5) 唯一同时支持 Selenium(PC 端)和 Appium(APP 端)的大麦抢票方案。随着大麦锁定 APP 购票的趋势,Appium 方案的价值将持续上升。
-
穷举式容错策略(新颖度 3/5 | 实用性 5/5 | 可迁移性 4/5) 4 种观演人选择方法 + 5 种提交按钮策略的 try-except 链,用代码量换可靠性。这种「穷举对抗 UI 不确定性」的范式可迁移到任何需要对抗频繁 UI 改版的自动化场景。
-
Appium V2 性能优化(新颖度 3/5 | 实用性 4/5 | 可迁移性 5/5) 社区贡献者 BlueCestbon 引入的
waitForIdleTimeout: 0(跳过默认的 idle 等待)+ 坐标点击替代元素查找(避免 Appium 的元素树遍历开销),是有实战价值的 Appium 优化技巧。
可复用的模式与技巧
- Cookie 持久化跳过登录:
pickle.dump(cookies)保存登录态,下次直接加载——抢票场景的标准做法 - 多种选择器穷举 try-except:依次尝试 text/class/XPath/DOM ID 等多种定位方式——对抗 UI 改版的通用防御策略
- Appium
waitForIdleTimeout: 0:跳过 Appium 默认的 idle 等待(节省 1-3 秒)——任何时间敏感的移动端自动化可复用 - 坐标点击替代元素查找:在已知元素位置稳定的场景中,坐标点击比元素查找快数倍
关键设计决策
- 单文件 concert.py 承载全部逻辑:简单直接但 1,564 行的 God Object 可维护性差
- Selenium + Appium 双驱动:覆盖 PC 和 APP——代价是两套代码大量重复
- pickle 保存 Cookie:简单但有安全隐患(pickle 反序列化可执行任意代码)
- 中文硬编码日志:对目标用户友好但无国际化能力
竞品格局与定位
竞品对比矩阵
| 维度 | ticket-purchase | damai_ticket | damai-helper | 其他抢票脚本 |
|---|---|---|---|---|
| Stars | 6,214 | ~1,800 | ~1,200 | <500 |
| PC 端 | ✅ Selenium | ✅ | ✅ | 各异 |
| APP 端 | ✅ Appium | ❌ | ❌ | ❌ |
| 容错策略 | 4+5 种穷举 | 单一选择器 | 单一选择器 | 各异 |
| 维护状态 | 低维护 | 停更 | 停更 | 各异 |
差异化护城河
唯一双端覆盖是核心壁垒。随着大麦限制 PC 购票,只有 Appium 方案的 ticket-purchase 能覆盖全场景。穷举容错设计让它在 UI 改版后的存活率远高于竞品。
竞争风险
- 大麦网可能增加更严格的反自动化检测(滑块验证、行为分析)
- 无开源许可证,法律上任何使用都处于灰色地带
- 抢票行为本身可能违反大麦网 ToS
套利机会分析
- 信息差: 中文社区已有认知(GitHub Trending 爆发),但「穷举容错作为工程范式」「Appium V2 性能优化技巧」值得提炼为通用技术文章
- 技术借鉴: 穷举式多选择器容错、Appium waitForIdleTimeout 优化、Cookie 持久化——三个在自动化测试/爬虫场景通用的技巧
- 生态位: 大麦抢票赛道绝对 #1,但赛道天花板有限
- 趋势判断: 低维护但持续有 Fork,实用价值仍在。关键取决于大麦网的反自动化策略
风险与不足
- 无开源许可证:法律上所有使用都未授权
- 维护几乎停滞:21 次提交 / 2.5 年,63% Issue 未关闭
- concert.py 1,564 行 God Object:PC/APP 逻辑交织,大量重复代码
- pickle 安全隐患:反序列化可执行任意代码
- 零业务测试:核心抢票逻辑完全无测试
- 合规风险:自动化抢票可能违反大麦网 ToS 和相关法规
- 社区健康评分仅 28%:缺少 Contributing Guide、Code of Conduct、Issue Template
行动建议
- 如果你要用它: 适合有 Python 基础的个人用户抢票。PC 端需安装 Chrome + ChromeDriver,APP 端需配置 Appium + Android 模拟器/真机。注意合规风险,仅用于个人非商业用途
- 如果你要学它: 重点关注
concert.py的穷举容错策略(4 种观演人选择 + 5 种提交按钮)和app_concert.py的 Appium V2 优化(waitForIdleTimeout: 0+ 坐标点击) - 如果你要 fork 它: 最急需——添加开源许可证、拆分 concert.py 的 God Object、用 JSON 替代 pickle 存储 Cookie、增加基础测试、提取选择器为配置文件降低改版适配成本
知识入口
| 资源 | 链接 |
|---|---|
| DeepWiki | deepwiki.com/WECENG/ticket-purchase |
| Zread.ai | 未收录 |
| 关联论文 | 无 |
| 在线 Demo | 无(本地运行) |