ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

大麦自动抢票Appium实战:详情页停好,订单交给脚本

大麦自动抢票Appium实战:详情页停好,订单交给脚本

大麦自动抢票Appium实战:详情页停好,订单交给脚本

【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase

开售那一刻,手指刚划到购买按钮,页面弹出一行"已抢光"。你盯着屏幕发呆,刷新也没用——慢的这几秒,票已经没了。

ticket-purchase 就是一个大麦自动抢票工具:用 Appium 安卓自动化驱动手机上的大麦 App,从演出详情页一路点选票档、勾观演人、提交订单。你唯一要做的,是把手机停在详情页,开售那一下由脚本接管。

先自检:红项照提示补,全绿再往下走

整条链路压在几层软件上,一张表说清:

项目版本要求用途
Python3.9+运行抢票脚本
Node.js20.19.0+ / 22.12.0+ / 24.0.0+跑 Appium 服务
Appium3.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.sh

Windows 下改跑 check_environment.py。

结果判读很简单:全绿✅ = 可以往下走;红项❌照脚本打印的提示补,Appium 装不上就先npm install -g appium,再appium driver install uiautomator2。

改完示例路径,Appium 服务先于抢票启动

跑任何脚本之前,先把 start_appium.sh 和 start_ticket_grabbing.sh 里硬编码的示例路径(作者机器的 SDK 目录、Python 解释器地址)改成本地的,不改必报错。

执行步骤按这个顺序来:

  1. 开第一个终端,执行./start_appium.sh。它先核对设备在线、大麦 App 已装,再拉起 4723 端口的 Appium 服务。你此时屏幕上应看到服务器地址: http://127.0.0.1:4723,这个终端全程不能关,关了脚本就失联。
  2. 手机打开大麦 App,搜到目标演出,停在详情页。脚本从这一页接手,搜索环节不用你管。未开售时底部按钮是"预约",开售后变"立即购买",两种文案脚本都识别。
  3. 开第二个终端,执行./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),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进