大麦抢票自动化5分钟跑通:ticket-purchase从登录到提交订单的完整流程
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
从扫码登录到提交订单,整条链路都由程序代你完成。ticket-purchase 是一个大麦抢票自动化项目,支持一次性指定观演人员、城市、日期场次与票价,你只需写好几行配置,剩下的选择、轮询、重试、提交它来执行。
大麦抢票自动化工具定位:配置进、订单出
这个项目用 Python 实现,Web 端基于 Selenium 驱动 Chrome,移动端基于 Appium 驱动 Android 上的大麦 APP。输入是一份 JSON 配置:目标演出地址、观演人、城市、场次日期、票价;处理过程是程序模拟人工操作大麦详情页——匹配城市选项、点选场次与票价、轮询"立即预订"按钮、勾选观演人;输出是一份已提交的订单,或停留在确认页等你手动提交。大麦的不少票源仅限 APP 端购买,因此仓库同时提供了 damai_appium 移动端实现,这也是它的输入→处理→输出与纯网页脚本的区别所在。
抢票机制时间线拆解:环境检查到提交订单的6个阶段
把 核心逻辑源码 的执行路径按时间线展开,共 6 个阶段:
- 环境检查:加载
config.json,校验 Chrome 与 ChromeDriver 版本是否匹配; - 扫码登录:打开大麦登录页,你用 APP 扫码,这是全程唯一需要你动手的环节;
- 详情页选择:依次匹配城市(如"广州站")、场次(如"2023-10-28 周六 19:00")、票价(如"1039"),并设置购票数量,这一阶段对应的就是页面上城市 Tab、场次和票档区域;
- 轮询预订按钮:开售前页面不可购买,程序按固定间隔刷新检测"立即预订"是否出现,
fast_mode开启时轮询间隔从 1 秒降到 0.3 秒(项目文档给出的示例数据); - 勾选观演人:按
users列表逐个勾选,未找到时自动重试 5 次、每次间隔 0.5 秒; - 提交订单:找到"立即提交"按钮并点击,是否真正提交由
if_commit_order控制。
最简配置5分钟跑通:最小命令与最小字段
最小可跑版本
git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase pip install -r damai/requirements.txt ./check_environment.sh编辑damai/config.json,只保留跑通一次所需的最少字段,if_commit_order先设为false,让程序走完全流程但不真正下单:
{ "index_url": "https://www.damai.cn/", "login_url": "https://passport.damai.cn/login", "target_url": "https://detail.damai.cn/item.htm?id=738291023", "users": ["张三"], "city": "广州", "dates": ["2023-10-28"], "prices": ["1039"], "if_commit_order": false }cd damai python damai.py看到"扫码登录"提示后用手机扫码,控制台会依次输出城市、场次、票价的匹配结果。首次运行以观察输出为目的,确认每一步都能对上再谈抢票。
完整配置字段逐项说明
index_url/login_url:大麦首页与登录页地址,保持默认即可;target_url:演出详情页完整地址,必须带id=xxx参数,直接从浏览器地址栏复制;users:观演人姓名数组,必须与账号里填写的名字逐字一致,程序会按列表人数自动设置购票数量;city:城市名称,与页面城市 Tab 的文本匹配,"广州站"只需填"广州";dates:场次日期数组,YYYY-MM-DD与页面上的"10月28日"等形式都能被模糊匹配;prices:票档价格数组,只填数字,不带"元"或"¥";if_listen:是否监听缺货登记回流,开启后售罄状态也会持续轮询;if_commit_order:是否自动点击"立即提交",首次使用保持false;fast_mode:快速模式,减少各类等待时间,项目文档称约节省 5-8 秒(示例数据);max_retries:轮询按钮的最大重试次数,默认 1000;page_load_delay:订单确认页加载等待秒数,默认 2,网络慢可调到 5。
字段细节也可以对照 PC端完整使用指南.md) 核对。
场景化玩法:按你的实际情况选配置
单人首刷,验证配置正确性。目标是确认流程跑通而不是抢票:fast_mode设false保留完整调试输出,if_commit_order设false,page_load_delay给 3-5 秒,users只放 1 个人。
热门场次准点抢。配置确认无误后切换到实战参数:
{ "users": ["张三", "李四"], "dates": ["2023-10-28"], "prices": ["1039", "999"], "fast_mode": true, "if_listen": true, "if_commit_order": true, "max_retries": 5000 }prices里按偏好顺序放多个票档,主档售罄时程序会尝试下一档;max_retries调大是为了撑过开票前的持续轮询(以上数值为示例配置)。
网络一般的低配置环境。关掉fast_mode,page_load_delay调到 5 秒以上,dates和prices多写几种格式(如"2023-10-28"与"10月28日"),用冗余匹配弥补页面加载慢带来的失误。
票源只在 APP 端。先跑./check_environment.sh与./start_appium.sh把 Appium 拉起来,然后在设备上打开大麦 APP 并搜到目标演出,最后执行./start_ticket_grabbing.sh。移动端配置在damai_appium/config.jsonc,字段换成server_url、keyword(搜索关键词)、date(如"10.04")、price(如"1039元")和price_index(票档在页面上的位置索引,从 0 开始,需先手动数一遍)。移动端细节见 app.md 说明,注意新版 APP 票档文本可能为空串,price_index的取值依赖你手动核对。
踩坑实录:我遇到的4个真实问题
第一次跑 Web 端时,脚本启动即抛SessionNotCreatedException。定位是报错里写明的 ChromeDriver 与 Chrome 版本不匹配。解决:重跑脚本让它自动下载匹配的驱动,或手动执行 check_environment.py 复核。
第一次真实演练时,日志反复提示未找到观演人"张三"。定位:关闭fast_mode看扫描输出,页面里的名字带了一个不可见空格。解决:在users里加上带空格的变体,程序在第 3 次重试时命中。
转战移动端,start_ticket_grabbing.sh直接报 Appium 服务器未运行。定位:curl http://127.0.0.1:4723/status无响应,说明服务根本没启动。解决:先跑./start_appium.sh,再执行抢票脚本,顺序不能反。
还有一次appium driver install报 Node 版本过低。定位是报错要求^20.19.0 || ^22.12.0 || >=24.0.0。解决:升级 Node 到 20.19.0 以上后重装驱动,通过。
边界清单:5件事别做
⚠️ 不要用抢到的票做商业倒卖,本项目仅供个人购票与学习研究。
不要把max_retries调到极限、同时跑多个实例去高频轰击页面,轮询频率保持克制。
不要在配置文件里写真实密码,也不要把含观演人信息的配置公开分享。
不要在同一段开售时间用多个账号叠加同一台设备反复下单。
不要在未确认订单内容前把if_commit_order设为true,金额与票档核对完再放手。
收口
如果你只是第一次接触,把if_commit_order保持为false跑通全流程,确认城市、场次、票价都能对上再谈实战。如果你已有明确目标场次且配置验证过,直接开启fast_mode与自动提交,提前约 30 分钟启动脚本完成登录。如果你要抢的票只在 APP 端放售,就跳过 Web 端,按移动端路径先把./check_environment.sh跑绿,再进入 Appium 流程。
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考