大麦自动抢票教程:三步跑通环境、配置与开售

大麦自动抢票教程:三步跑通环境、配置与开售

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

开售瞬间,票档按钮可能一秒钟内就变灰——打开页面、选票档、选场次、填观演人这一串动作,手动做往往来不及。ticket-purchase 是一个大麦自动抢票工具:两套脚本分别驱动 Chrome 和 Android 真机,自动完成选城市、选场次、选票档、填观演人、提交订单,你只需把演出信息写进配置文件。适合愿意自己搭环境、想抢热门场次的人。

先判断它适不适合你

跑之前先对一遍前提,缺哪端就只做哪端:

  • 两端共用:Python 3.9+;Web 端另需最新版 Chrome;
  • 移动端另需:Node.js 20.19.0+(22.12.0+ / 24.0.0+ 亦可)、Appium 3.1.0+ 并装好 uiautomator2 驱动、一台开了 USB 调试的 Android 真机或已启动的模拟器(大麦 APP 装好并登录)、ANDROID_HOME 配好且 adb devices 能看到设备;
  • 系统上 macOS、Windows、Linux 均可,但仓库里的 shell 脚本是 bash 写的,Windows 下照着脚本里的等价命令手动执行即可。

三个第三方工具先说清楚:Selenium 是「用代码操控浏览器」的库,负责开页面和点按钮;Appium 是个「远程替你操作手机」的服务,脚本连上它,由它在手机上执行点击;uiautomator2 是 Appium 操作 Android 界面所需的驱动。

什么情况建议换方案:目标演出在大麦 Web 端能正常购买,就别折腾移动端,走 Web 端更省事;演出是「选座购买」类型时,Web 脚本到选座环节会停下来等你手点座位,做不到全自动。确认完这些,进入最短上手路径。

最短上手路径

以下按移动端(功能最全的一路)串成一条时间线,只走 Web 端的话,第 3~5 步可以整体跳过。

1. 拿代码并装 Python 依赖

git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase
cd ticket-purchase
pip install -r requirements.txt

也可以 poetry install。做完后应看到安装完成、无报错。

2. 装 Node 与 Appium(仅移动端)

npm install -g appium
appium driver install uiautomator2

做完后 node --version 应显示 20.19.0 以上,appium --version 显示 3.1.0 以上。

3. 跑一次环境自检

./check_environment.sh

做完后应看到 Python、Node、Appium、ADB、设备、大麦 APP、配置文件逐项打勾。注意:check_environment.sh、start_appium.sh、start_ticket_grabbing.sh 里写死了作者的 macOS SDK 路径(/Users/... 开头),换机器先把这几处改成你自己的 SDK 路径,否则会误报失败。

4. 启动 Appium 服务(一个终端)

./start_appium.sh

启动前,手机里的大麦 APP 打开、目标演出搜好、页面停在详情页——脚本从详情页开始点,不会替你搜索。做完后应看到「服务器地址: http://127.0.0.1:4723」,这个终端保持运行。

5. 首跑(另一个终端)

./start_ticket_grabbing.sh

做完后应看到它先核对 Appium 状态与 config.jsonc,回显当前的 keyword / city / users,再问一句「确认开始抢票?(y/N)」,按 y 进场,控制台依次打印:选择城市 → 点击预约按钮 → 选择票价 → 选择数量 → 确定购买 → 选择用户 → 提交订单。脚本结尾的 python 路径也是作者 venv 的写死路径,可改成你自己的解释器,或直接 cd damai_appium && python damai_app_v2.py。跑通首跑后,下一步是把演出信息写进配置文件。

只需改动的地方:配置文件

换一场演出,代码一行不动,只改配置。两端的脚本瞄准的是同一个页面:大麦演出详情页,城市、场次、票档都是页面上的按钮。

大麦自动抢票目标页面:演出详情页的城市、场次、票档按钮区域

移动端配置字段逐项说明(config.jsonc)

配置文件在 damai_appium/config.jsonc,共 8 个字段。首跑务必把 if_commit_order 留在 false——脚本选中票档后先停在订单确认页,人工核对无误再翻成 true:

{
  "server_url": "http://127.0.0.1:4723",
  "keyword": "周深",
  "users": ["姓名1", "姓名2"],
  "city": "深圳",
  "date": "12.06",
  "price": "内场1199元",
  "price_index": 5,
  "if_commit_order": false
}
字段作用怎么填填错会怎样
server_urlAppium 服务地址保持默认,4723 被占用才改与服务端口对不上,连接被拒
keyword搜索词歌手名或演出全名搜到别的演出,整条流程跑偏
users观演人名单与账号实名信息逐字一致,可填多人差一个字就「超时未找到用户」,人数选不够
city演出城市按页面文案写,如「深圳」,走模糊匹配页面没有该城市按钮,第一步就失败
date目标场次日期如 12.06误中相邻场次
price目标票档数字或完整票档文案均可v2 实际按 price_index 点击,此字段供人工核对,填错不会改变实际选择
price_index票档序号从 0 开始,按页面票档排列顺序数差一位就买到别的价位
if_commit_order是否自动提交订单⚠️ 首跑 false,稳定后 truetrue 时选中票档后直接提交,订单即真实订单,不可撤回

两点提醒:票档的实际点击由 price_index 定位(大麦 APP 改版后票档按钮文本可能为空,所以脚本按位置取),填配置时以页面顺序数一遍序号;date 是「月.日」格式,和 Web 端的完整日期不同,别混。

Web 端配置(config.json)

Web 端配置在 damai/config.json,比移动端多一个 target_url:先手动登录大麦、打开目标演出详情页,把地址栏完整 URL 粘进去。

大麦自动抢票 Web 端配置与页面元素对照:target_url、city、date、price 的取值位置

{
  "index_url": "https://www.damai.cn/",
  "login_url": "https://passport.damai.cn/login",
  "target_url": "目标演出详情页的完整URL",
  "users": ["姓名1", "姓名2"],
  "city": "杭州",
  "dates": ["2026-04-11"],
  "prices": ["680"],
  "if_listen": true,
  "if_commit_order": false,
  "max_retries": 1000
}

必填的是 index_url、login_url、target_url、users 四个字段,缺一个脚本直接退出。其余几项:dates / prices 是数组,日期格式为 YYYY-MM-DD,可各填多个值;if_listen 控制缺货时是否点「缺货登记」;max_retries 是失败重试上限,默认 1000。首跑同样是 if_commit_order 保持 false。Web 端首次运行会弹窗让你扫码登录并把 cookie 存成 damai_cookies.pkl,之后复用免登。更多细节可看仓库里的完整使用指南(PC端).md.md)。配置改完,下一步是选定走哪一端。

Web 端和移动端怎么选

Web 端配置大致长这样,改的仍是同一个演出信息集合:

大麦自动抢票 Web 端 config.json 配置示例:users、city、dates、prices 各字段

对比项Web 端(damai/)移动端(damai_appium/)
驱动方式Selenium 驱动 ChromeAppium + uiautomator2 驱动真机/模拟器
入口damai/damai.pydamai_appium/damai_app_v2.py
配置文件damai/config.json,多 target_urldamai_appium/config.jsonc,多 price_index
额外环境ChromeNode + Appium + 设备 + 大麦 APP
适合场景演出在 Web 端可正常购买、电脑网络稳演出只能在 APP 端买,或手机端信号更好

两端的公共设计一致:城市、日期、票档走模糊匹配,页面文案变一两个字流程不垮;内置循环重试,偶发失败自动重来;执行路径都是「登录/状态检查 → 选票档 → 选观演人 → 提交订单」。结论很简单:哪边网络条件好、环境更稳就用哪边,两套代码互不依赖,可以并行准备,先跑通哪端就先上哪端。选好端之后,重点看下面几个高频故障点。

最容易翻车的 5 个地方

  • 现象:启动 Appium 报 Node version must be at least ^20.19.0 || ^22.12.0 || >=24.0.0 → 原因:Node 版本过旧 → 处理:升级 Node 到 20.19.0+,再跑 ./check_environment.sh 复核。
  • 现象:脚本报 Connection refused 或「Appium服务器未运行」→ 原因:服务没起,或 server_url 与实际端口对不上 → 处理:重跑 ./start_appium.sh,用 curl http://127.0.0.1:4723/status 验证服务是否活着。
  • 现象:adb devices 看不到设备 → 原因:USB 调试未开,或模拟器没启动完 → 处理:真机开调试重新插拔;模拟器等完全进系统再跑。
  • 现象:报 Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported → 原因:SDK 环境变量没配,或脚本里还是作者的写死路径 → 处理:export 两个变量指向你的 SDK 目录,同时改脚本内路径。
  • 现象:控制台打印「超时未找到用户」,或票档点错 → 原因:姓名与页面文案不一致,或 price_index 与页面顺序对不上 → 处理:姓名逐字核对;按页面顺序从 0 重新数票档序号。移动端若 import appium 报错,说明 appium Python 包没装,执行 pip install Appium-Python-Client。故障点清完,开跑前再做一轮检查。

三类演出,配置侧重点不同

  • 演唱会:users 列全部常用观演人,price 锁主档位、price_index 做双保险;
  • 话剧 / 音乐剧:场次多、页面加载慢,date 对准目标那一场,票档文案不清时以 price_index 为准;
  • 体育赛事:同城多场,city 必填,页面变动大的场次 prices 只填数字。

开跑前的最后 3 项检查

  1. 试跑模式:两端 if_commit_order 都保持 false,在非开售状态下把完整流程走一遍——脚本应依次命中城市、场次、票档、观演人,并停在订单确认页等你手动确认;
  2. 页面就位:移动端确认大麦 APP 停在目标演出详情页,Web 端确认 target_url 能打开且已登录;
  3. 🚨 放开自动化:只有试跑稳定、每一环节都核对无误后,才把 if_commit_order 翻成 true;开售瞬间保持两个终端稳定,别做其他操作。

以上三项全过,这套流程才算真正就绪。自动提交产生的是真实订单,请务必先以手动确认模式验证;选座购买类演出、以及依赖页面元素的自动化逻辑,在大麦页面改版后都可能需要重新核对。本工具仅供个人学习研究使用,请合理使用并遵守大麦平台规则。

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

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值