大麦抢票自动化指南:如何从环境自检到订单提交,3分钟跑通全流程
2026/9/24 17:04:22 网站建设 项目流程

大麦抢票自动化指南:如何从环境自检到订单提交,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_urlAppium 服务器地址"http://127.0.0.1:4723"必须与appium --port一致
keyword搜索关键词"周深"运行前先在 APP 内搜好并进入详情页
users观演人数组["王胜","潘鸿运"]与实名信息一致
city城市"深圳"同 Web 端,取页面原文
date日期"12.06"注意是"月.日"短格式
price票价描述"内场1199元"仅作展示参考
price_index票档索引(从 0 计)5V2 版靠索引点击,需事先手动数好位置,这是移动端最关键的参数
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.0Node.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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询