大麦抢票自动化指南:如何从环境自检到订单提交,3分钟跑通全流程
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
本文基于开源项目 ticket-purchase 撰写。这是一个用 Selenium 与 Appium 构建的大麦抢票自动化工具:把"打开详情页 → 选城市、场次、票价 → 选观演人 → 提交订单"这条链路交给脚本执行,人只负责填配置和最后的支付确认。适合两类人:一是在开票时刻总是慢半拍的普通观众;二是想学习 Appium/Selenium 移动端与 Web 端自动化的开发者。
先说清楚它的边界:工具负责"选与点",不负责"付"。订单提交后仍需你本人在规定时间内完成支付;热门场次的竞争依旧存在,自动化压缩的是操作时间,不保证必然买到。
一分钟看懂它能做什么
- Web 端(Selenium + Chrome):扫码登录后自动进入目标演出页,轮询"立即预订"按钮,出现即点击,随后按配置选择城市、场次、票价、观演人并提交订单。核心流程在 damai/concert.py。
- 移动端(Appium + 大麦 APP):很多场次只在 APP 端开售,移动端方案在真机或模拟器上直接操作大麦 APP,V2 版改用坐标点击与极短等待来提升响应速度,实现见 damai_appium/damai_app_v2.py。
- 内置重试:按钮未出现、观演人元素未加载时会自动重试(观演人扫描最多 5 次、每次间隔 0.5 秒),避免一次抖动就终止。
三分钟跑起来:环境自检与最小命令
大麦抢票环境一键自检步骤
git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase ./check_environment.sh第一条命令拉取代码;第二条进入目录;第三条是移动端环境自检脚本,会依次检查 Python、Node.js、Appium、Android SDK、ADB、设备连接和大麦 APP 是否安装,每项给出 ✅ 或 ❌,并在失败时直接打印修复命令。
Web 端另有 Python 版自检,顺带下载匹配的 ChromeDriver:
python damai/check_environment.py最快运行抢票脚本的命令
Web 端(只需要 Chrome 和 Python 依赖):
cd damai python damai.py启动后会打开浏览器,脚本先校验 damai/config.json 是否存在、必填字段是否齐全,然后请你扫码登录,之后全程自动。
移动端(需要 Android 设备 + Appium):
./start_appium.sh # 启动 Appium 服务器,占用一个终端 ./start_ticket_grabbing.sh # 另一个终端执行,先确认配置再开始start_ticket_grabbing.sh会先curl检查 Appium 是否存活、打印当前配置摘要,并要求你手动输入 y 确认,避免误触。注意:这两个脚本里硬编码了作者 Mac 上的 Android SDK 路径(/Users/shengwang/...),非 macOS 环境建议改成手动启动,效果完全一样:
export ANDROID_HOME=/your/path/to/android/sdk # 指向你自己的 SDK appium --port 4723 # 启动 Appium cd damai_appium && python damai_app_v2.py # 执行抢票移动端运行前,先在手机/模拟器里把大麦 APP 打开、登录、搜索到目标演出并停在详情页,脚本从"详情页"这个位置开始接管。
一次完整实战:一场广州演唱会的 Web 端抢票
下面用一个真实页面的走查过程演示参数是怎么填的,所有素材都来自仓库内截图。
第 1 步:打开演出详情页,拿 target_url。在大麦网找到目标演出(示例为「2023 当我们谈论爱情·梁静茹世界巡回演唱会 广州站」),点开详情页后直接复制地址栏,填入配置的target_url。
第 2 步:把页面元素逐项映射到配置。仓库里的标注图已经把对应关系画出来了:city取城市标签"广州"、date取场次"2023-10-28"、price取票档"1039"、target_url取地址栏。
第 3 步:运行并观察控制台。执行python damai.py后,正常输出应依次出现:配置加载成功(打印目标 URL、观众人数、最大重试次数)→ Chrome 环境就绪 → 扫码登录 → 城市匹配成功 → 场次匹配成功 → 票价匹配成功 → 进入"轮询预订按钮"状态。开票瞬间检测到"立即预订"按钮后自动点击,跳转订单确认页,逐个勾选观演人,最后打印"订单已提交"。
耗时参考:官方文档 完整使用指南(PC端).md.md) 给出的数据是,开启fast_mode后,详情页选择环节从 4~7 秒压缩到 1.1~1.8 秒,轮询间隔从 1 秒降到 0.3 秒,整体相比普通模式节省约 5~8 秒——这几秒在开票瞬间就是差距所在。脚本提交订单后页面会停留 5 分钟,留给你的就是完成支付。
配置速查:大麦抢票参数对照表
配置文件是全部行为的大脑,两端各一份,字段如下。
Web 端:damai/config.json
| 字段 | 含义 | 示例 | 易踩坑 |
|---|---|---|---|
index_url/login_url | 首页、登录页地址 | https://www.damai.cn/ | 一般不用改 |
target_url | 演出详情页地址 | https://detail.damai.cn/item.htm?id=xxx | 必须打开该页后从地址栏复制 |
users | 观演人姓名数组 | ["张三","李四"] | 必须与 APP 内实名观演人完全一致,注意空格与后缀 |
city | 城市 | "广州" | 写页面标签原文,不要写成"广州市" |
dates | 场次日期数组 | ["2023-10-28"] | 可多写几种格式兜底,如"10月28日" |
prices | 票价数组 | ["1039"] | 同样建议多格式:["1039","¥1039"] |
if_listen | 监听缺货/回流票 | true | 想抓回流票时保持开启 |
if_commit_order | 是否自动提交订单 | false | 首次运行建议先关,人工确认再手动提交 |
max_retries | 最大重试次数 | 1000 | 准点开票可适当调大 |
fast_mode | 快速模式 | true | 调试出错时先关掉看详细日志 |
page_load_delay | 页面加载等待(秒) | 2 | 网络慢时调到 5~10 |
仓库自带的移动端配置 damai_appium/config.jsonc 示例长这样(Web 端config.json同理,字段见上表):
移动端:damai_appium/config.jsonc
| 字段 | 含义 | 示例 | 易踩坑 |
|---|---|---|---|
server_url | Appium 服务器地址 | "http://127.0.0.1:4723" | 必须与appium --port一致 |
keyword | 搜索关键词 | "周深" | 运行前先在 APP 内搜好并进入详情页 |
users | 观演人数组 | ["王胜","潘鸿运"] | 与实名信息一致 |
city | 城市 | "深圳" | 同 Web 端,取页面原文 |
date | 日期 | "12.06" | 注意是"月.日"短格式 |
price | 票价描述 | "内场1199元" | 仅作展示参考 |
price_index | 票档索引(从 0 计) | 5 | V2 版靠索引点击,需事先手动数好位置,这是移动端最关键的参数 |
if_commit_order | 是否自动提交 | true | 首次建议先设false |
为什么移动端要用索引而不是按文字找按钮?作者在 damai_appium/app.md 里解释:大麦 APP 更新后票价按钮的 Text 变成了空串,无法再用文本定位,V2 改为解析页面信息、按下标取元素。代价就是这个下标需要人工提前数。
翻车现场与解法:常见报错对照
以下均按"现象 → 对策"整理,来自 README 故障排除章节与源码逻辑,按顺序排查效率最高。
Q1:报SessionNotCreatedException: This version of ChromeDriver only supports...?ChromeDriver 与浏览器版本不匹配。直接重跑脚本即可——damai/check_environment.py 会自动下载正确版本;也可单独执行它做体检。
Q2:启动 Appium 时提示Node version must be at least ^20.19.0 || ^22.12.0 || >=24.0.0?Node.js 太旧。升级到 20.19.0 及以上版本后重试(macOS 可brew upgrade node)。
Q3:提示Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported?没有导出 Android SDK 环境变量。执行export ANDROID_HOME=/你的/sdk路径与export ANDROID_SDK_ROOT=同路径,并建议写进~/.bashrc持久化。
Q4:adb devices列表是空的,或报Unable to find an active device?设备没连上:真机要开 USB 调试并授权,模拟器要确认已启动完成(adb shell getprop sys.boot_completed应返回 1)。连上后再用adb shell pm list packages | grep damai确认大麦 APP 已安装(包名cn.damai)。
Q5:脚本报 AppiumConnection refused?服务器没起来或端口不对。先curl http://127.0.0.1:4723/status验证,通了再跑脚本;不通就回到"启动 Appium"那一步,并确认config.jsonc里的server_url端口一致。
Q6:日志反复出现未找到包含 '张三' 的元素?三种常见原因,按概率排:页面还没加载完(把page_load_delay调到 3~5);姓名与页面文本不一致(先关fast_mode看扫描输出,用 F12 查确切文本,页面上可能是"张三 "带空格或"张三(VIP)"带后缀);页面结构变化(保留完整调试输出以便排查)。
Q7:卡在"未找到明显的提交按钮"?先确认按钮没被弹窗或遮罩挡住、页面本身能手动点到;调试期保持if_commit_order: false,人工补上最后一下,比盲目重试安全。
进阶调优:快速模式、回流票与多端协同
- 快速模式:
fast_mode: true会缩短所有 sleep(点击后等待 0.5s→0.2s)、轮询 1s→0.3s,并跳过冗余调试输出。官方文档给出的总体收益是节省 5~8 秒,核心逻辑不变。调试阶段请关掉它换取完整日志。 - 回流票捕捉:热门场次开票后几分钟到几小时内常有退票回流。保持
if_listen: true让脚本持续监听缺货/可购状态变化,开售后 30 分钟到 2 小时是文档建议的重点时段。 - Web + 移动端双端:两条链路是独立实现的,理论上可以在不同设备上并行。但项目文档同时提醒不要在同一账号上并发跑多个脚本——如果做多端布局,请使用不同账号与设备,并各自独立配置。
- 移动端提速细节:V2 版用
mobile: clickGesture原生坐标点击(duration 仅 50ms)、禁用窗口动画、waitForIdleTimeout设为 0、显式等待从 5 秒压到 2 秒,详见 damai_appium/app.md。
代码地图:目录结构与关键文件
ticket-purchase/ ├── damai/ # Web 端抢票(Selenium) │ ├── damai.py # 入口:校验配置 → 登录 → 选场次票价 → 提交 │ ├── concert.py # 核心业务:Cookie 登录、匹配逻辑、订单提交 │ ├── config.py # 配置数据类 │ ├── check_environment.py # Chrome/ChromeDriver 自检与自动下载 │ └── requirements.txt # 依赖(selenium==4.18.1) ├── damai_appium/ # 移动端抢票(Appium) │ ├── damai_app_v2.py # 优化版主程序:坐标点击 + 极速等待 │ ├── damai_app.py # 初版实现,可对照阅读 │ ├── config.py # 配置加载 │ ├── config.jsonc # 移动端配置文件 │ └── app.md # V2 优化说明 ├── check_environment.sh # 移动端环境自检 ├── start_appium.sh # Appium 启动脚本 ├── start_ticket_grabbing.sh # 抢票启动脚本(带确认交互) ├── 完整使用指南(PC端).md # Web 端详细指南(含性能数据与排查表) └── tests/ # pytest 测试套件(单元 + 集成)开工清单与合规提示
抢票开始前,对照过一遍:
./check_environment.sh全部通过,Web 端 ChromeDriver 就绪target_url/keyword已指向目标演出,详情页能手动打开users与 APP 内实名观演人逐字核对过- 第一次演练时
if_commit_order设为false,走通全流程再放开 - 系统时间已同步;开售前 30 分钟启动脚本,提前 10 分钟完成登录
- 网络稳定(优先有线),关掉占带宽的程序
合规与账号安全:
- 项目许可证声明仅供学习和研究使用,请勿用于商业用途;使用前请自行确认大麦网使用条款,控制重试频率,不要用于倒卖门票。
- 配置文件里含观演人姓名等个人信息,不要外传。
- 支付环节始终由本人完成,提交后留意订单金额与票档是否配置一致。
工具把点击的时间成本降到了最低,但开票瞬间的竞争、支付倒计时里的紧张感,仍属于人的一部分。把准备工作做扎实,剩下的交给脚本。
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考