大麦自动抢票还拼手速?这套双端Python方案把抢票练成了“肌肉记忆“
大麦自动抢票还拼手速?这套双端Python方案把抢票练成了"肌肉记忆"
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
如果你的抢票经历是这样的——开售前死死盯住手机、倒计时结束手指狂点、页面转圈半秒后弹出"已售罄",那这篇文章就是为你准备的。大麦自动抢票工具 ticket-purchase,用 Python 把 Selenium 和 Appium 组合成一套"双端机器人":电脑浏览器一条线,安卓 App 一条线,替你完成从选城市、选场次、选票价到勾选观演人、提交订单的完整链路。
先说结论:它最大的价值不是"能抢",而是"抢得够快、够省事"。下面我从三个真实痛点出发,带你看看它具体是怎么解决的。
痛点一:你的手速跑不过网络延迟
开售瞬间,页面从"预约"变成"立即购买"往往只有一两秒。你手动操作,眼睛看到→大脑判断→手指点击,至少 300 毫秒起步;如果还要依次选日期、选票价、勾两个观演人、点提交,整个过程轻松超过 10 秒。而票,通常第一秒就被扫光了。
这个项目里最值得看的部分,就是移动端damai_appium/damai_app_v2.py这个"优化版"机器人。它把抢票流程拆成了七个步骤:选城市 → 点预约/购买 → 选票价 → 加数量 → 确定购买 → 勾选观演人 → 提交订单,全部自动完成。
为了让每一步都快,它做了几件很"激进"的事:
- 不点击按钮,直接点坐标。普通自动化要等元素"可点击"再调用
click(),它改成先用WebDriverWait只等元素"出现"(不等待可点击状态),拿到元素中心坐标后直接通过mobile: clickGesture发原生手势点击,点击时长压到 50 毫秒。 - 批量勾选观演人。多人票是抢票最拖时间的环节之一,
ultra_batch_click会先把所有观演人的坐标一次性收集好,然后几乎不间隔地连续点击,而不是"点一个、等一下、再点下一个"。 - 关掉一切没用的等待。驱动配置里把
waitForIdleTimeout、actionAcknowledgmentTimeout、keyInjectionDelay全部设为 0,等于告诉 UiAutomator2:"别等页面喘口气,元素一出现我就上手。"
用一句直白的话总结:它把人类的"看到→思考→点击"压成了机器的"检测到→点"两步,剩下的时间差,就是它抢到票而你手慢的原因。
痛点二:每场演出都要重写一遍脚本?
很多自动化工具强归强,但换个演出、换个城市就要改代码,劝退了一大批普通用户。这个项目反着来:你完全不碰代码,只改一个配置文件。
移动端所有抢票参数都集中在damai_appium/config.jsonc这一个文件里,像点菜一样填就行:
{ "server_url": "http://127.0.0.1:4723", "keyword": "周深", "users": ["王胜", "潘鸿运"], "city": "深圳", "date": "12.06", "price": "内场1199元", "price_index": 5, "if_commit_order": true }每个字段都对应抢票页面的一个真实操作:
| 配置参数 | 页面上的作用 | 示例值 |
|---|---|---|
keyword | 搜索目标演出 | "周深" |
users | 观演人名单,决定买几张、勾谁 | ["王胜","潘鸿运"] |
city | 自动点选城市 | "深圳" |
date | 自动点选演出日期场次 | "12.06" |
price | 票价描述,用于文本匹配 | "内场1199元" |
price_index | 票价在列表中的索引(从0开始) | 5 |
if_commit_order | 是否自动提交订单,设为false可先手动检查 | true |
这里有个很贴心的细节:APP 更新后,很多票价按钮的文本变成了空字符串,靠文字找按钮的旧方案失效了。V2 版改用"索引 + 可点击属性"定位票价(price_index就是干这个的),并给城市、购买按钮、提交按钮都准备了多套备选选择器——第一套找不到,自动换第二套、第三套。页面结构变了,脚本不至于直接瘫痪。
痛点三:环境配置劝退?一键脚本三件套
Appium + Android SDK + Node.js,光是听到这几个词,不少人就想关页面了。项目用三个 shell 脚本把这条"技术门槛"直接削平:
./check_environment.sh:把 Python 版本、Node 版本、Appium、Android SDK、ADB、设备连接、大麦 APP 是否安装、Appium 服务器是否启动,逐项体检一遍,哪缺补哪。./start_appium.sh:设置环境变量、检查设备、检查 APP,然后一键拉起 Appium 服务器。./start_ticket_grabbing.sh:校验服务器和配置文件,打印当前配置跟你确认后,直接进入抢票主流程。
(上图为大麦票务页面示例,演出信息、票价选择等关键元素一目了然;完整抢票流程见 img/大麦抢票流程.png)
整个上手路径是:git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase→ 装依赖 → 跑环境检查 → 改配置 → 启动。从零到能跑,熟练之后十分钟以内。当然,移动端第一次还是要手动在设备上打开大麦 APP、登录账号、搜索到目标演出并进入详情页,这是它刻意保留的人工环节——机器人只负责"抢",不负责"认路"。
进阶玩法:快抢与蹲守,两种策略任选
Web 端模块damai/damai.py+damai/concert.py里藏着另一套思路。它默认开启fast_mode(快速模式),用显式等待替代全局隐式等待,把刷新和点击间隔压缩到 0.1~0.3 秒,适合开售瞬间冲刺。
但它也能反过来用——把if_listen设为true,脚本会进入"监听"模式:反复检测按钮状态,遇到"提交缺货登记"就刷新重试,一旦按钮变成"立即购买"立刻点击。这正好应对两类经典场景:
- 预售秒杀:
fast_mode: true,开售前几分钟进详情页,盯着按钮从灰变亮,亮了就冲。 - 回流票蹲守:
fast_mode: false+if_listen: true,开着挂机,等有人退票释放库存,第一时间接手。
Web 端还内置了"多方案提交订单"的兜底逻辑:按文本、按 view-name 属性、按 class、按原始 XPath 依次尝试,全部失败才提示你手动点击——把"把订单交出去"这最后一步的容错率拉满了。
谁适合用它?
- 为偶像演唱会焦虑的普通人:不想熬夜盯手机,把重复劳动交给脚本,自己只需提前配好参数、盯一眼结果。
- 想学 Python 自动化的学生:这是一个真实、完整、有挑战的实战项目,双端、重试、备选选择器、性能调优,知识点密度很高。
- 技术尝鲜玩家:家里有 Android 模拟器或旧手机,拿来跑一遍流程,体会"机器替人"的乐趣。
最后提醒一句使用边界:请把它当作学习工具,遵守大麦网的平台规则,用测试账号操作,别把它变成干扰他人正常购票的手段。技术能帮你把流程走快,但买票这件事,公平永远比快更重要。
如果你今晚就要开抢,照着"环境检查 → 改config.jsonc→ 启动 Appium → 运行脚本"四步走即可。剩下的,就交给那套把等待时间压到零的代码吧。🎫
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
