大麦自动抢票Appium实战:详情页停好,订单交给脚本
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
开售那一刻,手指刚划到购买按钮,页面弹出一行"已抢光"。你盯着屏幕发呆,刷新也没用——慢的这几秒,票已经没了。
ticket-purchase 就是一个大麦自动抢票工具:用 Appium 安卓自动化驱动手机上的大麦 App,从演出详情页一路点选票档、勾观演人、提交订单。你唯一要做的,是把手机停在详情页,开售那一下由脚本接管。
先自检:红项照提示补,全绿再往下走
整条链路压在几层软件上,一张表说清:
| 项目 | 版本要求 | 用途 |
|---|---|---|
| Python | 3.9+ | 运行抢票脚本 |
| Node.js | 20.19.0+ / 22.12.0+ / 24.0.0+ | 跑 Appium 服务 |
| Appium | 3.1.0+ | 把点击指令传进安卓 App |
| Android SDK | 已设 ANDROID_HOME / ANDROID_SDK_ROOT | 管理与设备的通信 |
| Android 设备 | 真机开 USB 调试,或完全启动的模拟器 | 承载大麦 App |
| 大麦 App | 已安装、已登录、观演人已登记 | 抢票的主体 |
环境检查只需要一条命令(macOS / Linux,仓库根目录执行):
git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase ./check_environment.shWindows 下改跑 check_environment.py。
结果判读很简单:全绿✅ = 可以往下走;红项❌照脚本打印的提示补,Appium 装不上就先npm install -g appium,再appium driver install uiautomator2。
改完示例路径,Appium 服务先于抢票启动
跑任何脚本之前,先把 start_appium.sh 和 start_ticket_grabbing.sh 里硬编码的示例路径(作者机器的 SDK 目录、Python 解释器地址)改成本地的,不改必报错。
执行步骤按这个顺序来:
- 开第一个终端,执行
./start_appium.sh。它先核对设备在线、大麦 App 已装,再拉起 4723 端口的 Appium 服务。你此时屏幕上应看到服务器地址: http://127.0.0.1:4723,这个终端全程不能关,关了脚本就失联。 - 手机打开大麦 App,搜到目标演出,停在详情页。脚本从这一页接手,搜索环节不用你管。未开售时底部按钮是"预约",开售后变"立即购买",两种文案脚本都识别。
- 开第二个终端,执行
./start_ticket_grabbing.sh。它先确认 Appium 存活、配置文件存在,回显当前配置供你核对。输入 y 进入抢票循环:选城市 → 点购买 → 选票档 → 设数量 → 确定 → 勾观演人 → 提交订单。你此时屏幕上应看到逐步滚动的执行日志;单次失败隔 2 秒重建驱动再来,最多 3 次。
详情页三行文字,对应配置三个字段
移动端行为全部由 config.jsonc 驱动,字段解析逻辑见 config.py。Web 端兜底实现在 damai.py。
详情页上的城市、场次、票档三行文字,与配置里的三个字段一一对应,下图把映射标了出来:
核心就这几项,其余一行带过:server_url 是 Appium 服务地址,换端口就同步改;date 形如12.06;keyword 填歌手或巡演名。
{ "server_url": "http://127.0.0.1:4723", "keyword": "周深", // 搜索关键词 "users": ["王胜", "潘鸿运"], // 观演人,姓名与账号登记逐字一致 "city": "深圳", "date": "12.06", "price": "内场1199元", // 只给人眼核对,不参与点击 "price_index": 5, // 票档位置,从 0 数 "if_commit_order": false // 首次空跑设 false }改完长这样,对着它逐项核对:
票档索引为什么从 0 开始数。新版大麦 App 的票档文本是空串,按文字找按钮已经失效,脚本改按"票档区第几个可点位置"定位。页面档位顺序一变,索引就对不上,所以开跑前在详情页从上往下重新数一遍,第 6 个档就填 5。price 只负责让你确认没数错档。
users 决定买几张。脚本按数组人数点加号,写 2 个人就是 2 张票。姓名与账号登记的观演人差一个字,那一档就勾不上,整单作废。城市名可以偷懒:匹配走"精确 → 包含 → XPath 兜底"三级降级,"深圳"能命中"深圳站"。
五个症状卡片,卡住先对一遍
Node version 报错,Appium 拒绝启动。根因:本地 Node 太旧。修复:包管理器或官网升级 Node,跑完node --version确认达标再重跑自检。
Neither ANDROID_HOME nor ANDROID_SDK_ROOT。根因:环境变量没设,脚本摸不到 SDK。修复:
export ANDROID_HOME=/你的/android/sdk路径 export ANDROID_SDK_ROOT=/你的/android/sdk路径写进 ~/.bashrc 或 ~/.zshrc,下次登录还在。
adb devices 里设备显示 offline。根因:设备只连了一半,还没完全就绪。修复:真机重插数据线、重新确认 USB 调试弹窗;模拟器等adb shell getprop sys.boot_completed输出 1 再动手。
抢票脚本报 Connection refused。根因:第一个终端的 Appium 服务停了,或端口被占。修复:确认服务终端没关,再curl http://127.0.0.1:4723/status探活;端口被占就换端口,server_url 同步改。
点到了不想要的票档。根因:索引没对齐,或页面档位顺序变了。修复:在详情页票档区从第一个可点档位重新数,改完 price_index 再开跑。
交棒
- 本地配置已改成目标演出,if_commit_order 为 false 时空跑通过一遍
- price_index 重新数过,users 姓名与观演人登记逐字一致
- 手机停在演出详情页,账号已登录,网络稳定
- Appium 终端保持打开,status 接口有响应
- 开售时间确认,开抢前才把 if_commit_order 改 true
球到你这边了,终端开起来,开售那一下交给脚本。
遵守平台规则,理性购票。
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考