大麦自动抢票教程:从选城市到提交订单 7 步自动走完

发布时间:2026/10/31 10:53:28
大麦自动抢票教程:从选城市到提交订单 7 步自动走完

大麦自动抢票教程:从选城市到提交订单 7 步自动走完

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

大麦开票就几秒钟,手动点选总慢半拍。ticket-purchase 是大麦自动抢票项目,用 Appium(在电脑上驱动手机 App 的框架)和 Selenium(控制浏览器的库)自动完成选城市、选票档、选观演人、提交订单共 7 步,适合已备好 Android 模拟器或真机的人,也适合想在网页端守候回流票的 PC 端用户。

它是怎么做到的

项目分成两条独立路线:damai/目录用 Selenium 控制 Chrome 浏览器跑网页端抢票;damai_appium/目录用 Appium 搭配 UiAutomator2(安卓端的 UI 自动化驱动)直接驱动大麦安卓客户端。由于大麦大部分票只能在 App 端购买,作者的重心放在移动端:主程序 先定位元素再按坐标点击,多人勾选时先一次性收集全部坐标、再连续快速点击。移动端按固定顺序执行选城市、点预约/购买按钮、选票档、调数量、确定购买、勾选观演人、提交订单这 7 步,跑完还会打印整条流程的耗时。

动手前,一张表核对环境

把版本要求、设备依赖和环境变量合在一张表里,开工前逐项过一遍:

检查项要求怎么确认
Python3.9+python3 --version
Node.js20.19.0+ / 22.12.0+ / 24.0.0+node --version
Appium3.1.0+appium --version
Android SDKANDROID_HOME与ANDROID_SDK_ROOT都指向 SDK 目录echo $ANDROID_HOME
安卓设备adb devices中有状态为device的一行模拟器已启动或真机已授权 USB 调试
大麦 App设备上已安装(包名cn.damai)并已登录adb shell pm list packages \| grep damai
Chrome最新版,仅 Web 端需要能打开大麦网页即可
配置文件damai_appium/config.jsonc存在直接看仓库文件

跑一次 check_environment.sh 可以按上面顺序把各项一起检查完,缺什么会直接提示对应的安装命令。

最短路径跑起来

git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase ./check_environment.sh
pip install -r damai/requirements.txt npm install -g appium appium driver install uiautomator2

Web 端只需第一组命令里的 Python 依赖;移动端还需要后两条把 Appium 服务和安卓 UI 驱动装上。

注意:start_appium.sh、start_ticket_grabbing.sh 和 check_environment.sh 里写死了作者本机的 Android SDK 路径与 poetry 虚拟环境路径(/Users/shengwang/...)。首次使用前必须把脚本里的ANDROID_HOME、ANDROID_SDK_ROOT和 python 解释器路径改成你自己机器上的实际路径,否则脚本会在第一步就失败。

配置里最容易踩的坑

移动端:config.jsonc 配置参数逐项说明

damai_appium/config.jsonc 是移动端的唯一参数入口:

参数作用易错点
server_urlAppium 服务地址默认127.0.0.1:4723,改了要和服务启动端口一致
keyword演出搜索关键词脚本不含搜索动作,这一项仅供你手动停在详情页时参考
users观演人姓名列表必须与账号内观演人逐字一致;人数还决定票数,脚本按人数点加号
city演出城市必须和详情页显示文字完全一致,差一个字第一步就失败
date演出日期移动端格式是12.06(月.日),不是2026-12-06
price票档文字描述仅供人工核对,脚本不会读这个文字
price_index票档在列表中的索引从 0 开始计数,需自己在详情页数好再填
if_commit_order是否自动点提交订单设为 false 会停在提交前

最反直觉的是price_index。新版大麦界面里票档按钮的文本是空字符串,app.md 里明确写了这一点:按文字找按钮的老办法失效了,所以脚本改成在票档容器内按索引取第 N 个可点击项。price字段存在的意义,就是让你数索引时能核对"我数的第 5 个确实是一张内场 1199 元"。

Web 端:config.json 配置参数逐项说明

damai/config.json 字段为index_url、login_url、target_url(演出详情页地址)、users、city、dates、prices、if_listen(是否停在页面持续守候)、if_commit_order,另可调max_retries(默认 1000)、fast_mode(默认开)、page_load_delay(默认 2 秒)。下图把详情页各区域和对应配置字段标了出来:

这是填入编辑器后的config.json实例:

第一次运行的完整时间线

以一次移动端运行为主线,六个时点串起来:

时点动作预期结果
开售前启动安卓模拟器或连接真机,装好大麦并登录账号adb devices输出状态为device的一行
开售前执行./start_appium.sh服务监听127.0.0.1:4723,窗口保持运行
开售前在大麦 App 里搜keyword,手动停在目标演出详情页页面上的城市、票档与配置逐字一致
开售时刻执行./start_ticket_grabbing.sh,看完配置按y确认脚本启动,7 步按顺序执行
运行中盯控制台日志每步打印进度;失败等 2 秒重试,最多 3 次
结束后看最后一行输出流程成败与总耗时(秒)

第三行是全程唯一需要人做的动作:脚本的起点就是"已经站在详情页上",它不负责搜索和进入。Web 端则更短——填好配置后执行cd damai && python damai.py,浏览器自动打开目标页面,if_listen为 true 时会停留在页面上持续等回流票。

它的能力边界

支持暂不支持
移动端 7 步自动下单,失败自动重建驱动重试 3 次预约类演出流程(app.md 写明"只处理了抢票,预约的暂未考虑")
Web 端if_listen监听守候、max_retries/page_load_delay调优移动端监听模式;移动端重试次数写死在 damai_app_v2.py 入口的max_retries=3
环境自检脚本一次输出全部检查结果多设备并行;capabilities 中deviceName固定为emulator-5554,并行需自行改连接参数
搜索框已打开时的后续全部操作从首页进入详情页的步骤,须提前手动完成

报错速查

报错关键词原因处理动作
Node version must be at leastNode.js 版本低于 Appium 要求brew upgrade node升级后node --version复核
Neither ANDROID_HOME nor ANDROID_SDK_ROOTSDK 环境变量未设置export ANDROID_HOME=你的SDK路径,同步设置ANDROID_SDK_ROOT
Unable to find an active device or emulator模拟器未启动或真机未授权adb devices确认有device行,真机重新插拔并同意授权弹窗
Connection refusedAppium 服务没起或 4723 端口被占先跑./start_appium.sh,再用curl http://127.0.0.1:4723/status验证
城市选择失败city与详情页文字对不上对照详情页逐字核对配置
票价选择失败price_index数错或越界从 0 起重新数票档位置并更新索引

这个项目把"选档—选人—提交"的固定操作固化成了脚本,移动端用索引定位和坐标点击适配了 App 的界面变化,Web 端保留了守候模式。仓库声明仅供学习和研究使用,动手前请遵守大麦网的使用条款。开跑前建议先完整执行一遍./check_environment.sh,把标 ❌ 的项补齐,再挑一场竞争小的演出做一次全流程演练。

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

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