3步跑通大麦自动抢票:Python+Selenium+Appium双端购票自动化完整攻略
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
开票 30 秒就售罄,手再快也快不过服务器——这是大多数人在热门演出面前的真实处境。今天介绍的大麦自动抢票工具基于 Python 开发,用 Selenium 接管 Chrome 网页、用 Appium 驱动 Android 手机,把选城市、选场次、选票价、勾观演人、提交订单这一整套动作全部自动化。你只需要提前配好参数,开票瞬间它替你完成下单,全程零人工干预。
30 秒速览
| 项目 | 内容 |
|---|---|
| 一句话定位 | 大麦网购票全流程自动化,支持 Web 与手机双端 |
| 技术栈 | Python + Selenium(Web)/ Appium(移动端) |
| 环境依赖 | Python 3.7+;移动端另需 Node.js 20.19.0+、Android SDK、Appium、UiAutomator2 |
| 上手难度 | 低,配好 JSON 参数即可运行 |
| 适合谁 | 需要抢演唱会、体育赛事门票的新手和普通用户 |
先做选型:Web 端还是移动端?
两条技术路线都能跑通,但依赖成本不同。先看对比再决定:
| 对比项 | Web 端 | 移动端 |
|---|---|---|
| 自动化引擎 | Selenium + Chrome | Appium + UiAutomator2 |
| 额外依赖 | 无(Chrome 最新版即可) | Node.js 20.19.0+、Android SDK、Appium、UiAutomator2 |
| 配置文件 | damai/config.json | damai_appium/config.jsonc |
| 启动方式 | python damai.py | ./start_appium.sh+./start_ticket_grabbing.sh |
| 操作对象 | 大麦网页 | 大麦 Android APP |
| 适合人群 | 想最快跑通、不想折腾环境的人 | 习惯 APP 体验、需要模拟真机操作的用户 |
结论很直接:追求最短路径跑通,选 Web 端;需要 APP 侧界面或想模拟手机操作,选移动端。
两条路线互不冲突,环境允许的话可以都备着,开票时双管齐下。
从 0 到跑通:一条主线走完
不管选哪端,主线都是这 5 步:
第 1 步:拉取代码
git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase第 2 步:安装 Python 依赖
poetry install # 或者 pip install -r damai/requirements.txtSelenium 和 chromedriver-autoinstaller 会被自动装好,ChromeDriver 版本问题不用你操心。
第 3 步:一键体检环境
./check_environment.sh这条命令把 Python、Chrome、ChromeDriver(移动端还会检查 Node、Appium、ADB)全部扫一遍,缺什么报什么。
第 4 步:移动端额外配置(仅移动端需要)
- 安装 Node.js 20.19.0+
- 安装 Appium 与驱动:
npm install -g appium后执行appium driver install uiautomator2 - 设置
ANDROID_HOME和ANDROID_SDK_ROOT环境变量 - 用
adb devices确认设备已连接,并在设备里提前登录好大麦 APP
第 5 步:填配置并启动
- Web 端:编辑好 damai/config.json 后,进入
damai目录执行python damai.py,浏览器会自动打开,你扫码登录,脚本开始监控票务状态。 - 移动端:先
./start_appium.sh启动 Appium 服务,确认手机停在目标演出页,再执行./start_ticket_grabbing.sh。
环境检查一次到位,后面每次抢票只需要"改配置 + 点启动"。
配置精解:每个字段怎么填
配置文件是整个工具的核心,填对了才有后面的一切。先看target_url怎么拿:
打开大麦网页,搜索目标演出进入详情页,把浏览器地址栏的完整 URL 复制出来——里面有演出 ID,是脚本定位演出的唯一依据,填进target_url。页面上的城市、场次日期、票价栏,就是city、dates、prices三个参数的取值来源。
日期和票价支持多格式匹配。页面今天显示 "2024.05.11",明天可能改成 "5月11日",你一次把可能的写法都配上,脚本会挨个尝试:
"dates": ["2024-05-11", "5月11日", "2024.05.11"], "prices": ["580", "¥580", "580元"]大麦改了显示格式,你的配置照样能命中,不用等代码更新。
一个完整的 Web 端配置长这样:
参数速查表(Web 端 damai/config.json):
| 参数 | 作用 | 推荐值 |
|---|---|---|
index_url | 大麦首页,脚本入口 | https://www.damai.cn/ |
login_url | 登录页 | https://passport.damai.cn/login |
target_url | 目标演出详情页完整地址 | 从浏览器地址栏复制 |
users | 观演人姓名数组,按购买顺序排列 | ["张三", "李四"] |
city | 演出城市 | 与页面城市栏一致,如广州 |
dates | 场次日期,支持多格式 | ["2024-05-11", "5月11日"] |
prices | 票价,支持多格式 | ["580", "¥580"] |
fast_mode | 快速模式开关 | true(首次运行建议先false) |
if_listen | 持续监听回流票 | true |
if_commit_order | 是否自动提交订单 | 首次运行务必false |
max_retries | 轮询最大重试次数 | 默认 1000,热门演出 5000+ |
page_load_delay | 订单确认页加载等待(秒) | 3~5 |
移动端 damai_appium/config.jsonc 字段略有不同,核心是server_url(Appium 地址)、keyword(APP 内搜索词)、date、price、price_index(票价列表下标,从 0 开始)和if_commit_order,思路一致。
多格式写法是免费的容错保险,日期和票价能配几种格式就配几种。
原理拆解:开票瞬间脚本到底做了什么
Web 端详情页长这样,城市、场次、票价三个选择区域就是脚本依次操作的位置:
完整流程串起来是:
- 环境检查:验证 Chrome 与 ChromeDriver 版本兼容
- 扫码登录:打开大麦首页,等你人工扫码(唯一需要动手的环节)
- 进入详情页:加载
target_url - 依次选择:按配置匹配城市 → 场次日期 → 票价
- 轮询按钮:不断检查"立即预订"是否可点,有票立即跳订单确认页
- 选观演人:勾选
users里配置的人 - 提交订单:
if_commit_order为true时自动提交
各阶段的终端输出长这样,方便你判断脚本卡在哪一步:
环境检查阶段
================================================== 大麦网抢票脚本启动 ================================================== ✓ 配置文件加载成功 - 目标URL: https://detail.damai.cn/item.htm?id=123456 - 观众人数: 2人 ⏳ 正在检查Chrome环境... Chrome版本: 144 ✓ ChromeDriver就绪详情页选择阶段
***选择城市*** 目标城市: 杭州 ✓ 匹配成功: 杭州站 ***选择场次*** ✓ 匹配成功: 2026-04-11 周六 19:30 ***选择票价*** ✓ 匹配成功: ¥680订单提交阶段
***准备提交订单*** ✓ 找到立即提交 ***订单已提交***看懂输出日志,你就知道了脚本在哪一步、还差什么——排障只有一半工作量。
进阶调优:按场景开对开关
场景一:准点开票的热门场,快就是全部
- 做法:配置里设
"fast_mode": true - 收益:订单确认页加载从 2.0s 优化到 0s(改用显式等待);轮询间隔从 1.0s 降到 0.3s;点击后等待从 0.5s 缩到 0.2s。整体节省 5~8 秒,分秒必争的场景里这就是成败差距
- 提醒:快速模式会减少调试输出。第一次用、或出问题时,先关掉它看完整日志
场景二:网络波动、页面加载慢
- 做法:什么都不用配——选观演人环节找不到元素时,系统自动重试 5 次,每次间隔 0.5 秒,最多额外等 2.5 秒
- 收益:服务器响应慢时不再一票否决,成功率明显更稳
场景三:想多留一手
- 做法:多设备协同——不同账号 + 不同浏览器/设备并行跑,配置同一场演出
- 收益:相当于多买几份"保险";但控制请求频率,别太频繁,避免触发风控
场景四:不同票源,时间策略不同
| 场景 | 做法 |
|---|---|
| 准点开票 | max_retries设 5000+,提前 30 分钟启动脚本、10 分钟前完成登录、5 分钟前打开详情页 |
| 预售抢票 | 提前 1~2 分钟开始轮询,卡住开票瞬间 |
| 回流票 | if_listen: true持续监听,有票立即下单 |
进阶的本质是"提前量":模式、重试、设备数都是为开票那几秒服务。
排障避坑:问题速查 + 安全清单
| 现象 | 可能原因 | 解法 |
|---|---|---|
| 提示"找不到用户元素" | page_load_delay偏小;姓名与页面格式不一致 | 把page_load_delay调到 3~5 秒;检查名字有没有多余空格或后缀;关掉fast_mode看详细扫描日志 |
| ChromeDriver 版本不匹配 | Chrome 更新后 Driver 还是旧的 | 直接重跑脚本,会自动安装匹配版本;仍报错就执行python damai/check_environment.py手动体检 |
| 移动端提示设备未连接 | USB 调试未开 / 线缆问题 | 开启 USB 调试后adb devices复验;检查ANDROID_HOME是否已设置 |
| 移动端报 Node 版本错误 | Node.js 低于 20.19.0 | 升级到 20.19.0 / 22.12.0 / 24.0.0 任一兼容版本 |
| Appium 连接被拒 | 服务没启动或端口占用 | 确认./start_appium.sh在跑,检查 4723 端口是否被占用 |
安全使用清单
- ✅ 用小号测试和抢票,别拿主账号试错
- ✅ 首次运行设
if_commit_order: false,人工确认订单无误再开启自动提交 - ✅ 配置文件里有观演人真实姓名,不要外发、不要提交到公开位置
- ✅ 遵守大麦网使用条款,工具仅供学习与个人使用
先 false 后 true、先小号后主力——顺序对了,踩坑成本趋近于零。
资源延伸:核心文件与文档
- Web 端主程序:damai/damai.py
- 移动端优化版程序:damai_appium/damai_app_v2.py
- 配置解析类:damai/config.py
- 环境检查脚本:damai/check_environment.py
- 一键环境检查:
./check_environment.sh - Appium 启动脚本:
./start_appium.sh - 移动端抢票启动脚本:
./start_ticket_grabbing.sh - 项目概览:README.md
- 快速入门:QUICK_START.md
- PC 端完整指南:完整使用指南(PC端).md.md)
遇到问题先看 QUICK_START.md,细节查完整使用指南,基本能覆盖 90% 的情况。
抢票拼的从来不是手速,而是提前量:环境提前备好、参数配全格式、开关按场景调好,开票瞬间剩下的就交给脚本。祝你一次锁票成功 🎫⚡
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考