news 2026/9/24 14:31:33

大麦抢票脚本从环境到出票的完整上手路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大麦抢票脚本从环境到出票的完整上手路径

大麦抢票脚本从环境到出票的完整上手路径

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

ticket-purchase 是一个开源的大麦抢票自动化项目,仓库里同时给了两条可运行的路线:网页端用 Selenium 驱动 Chrome 浏览器抢票,移动端用 Appium(一套让脚本像人手一样操作安卓 App 的服务)驱动大麦 App 抢票。你要做的只是把演出、观演人、城市、日期和票价填进配置文件,开售后脚本自动完成检测、选择和下单。本文把它的内部链路、最短跑通路径、配置参数和高频故障一次讲清。

🧭 它是怎么抢到票的

两条路线共用同一条链路,拆开来是五步:

  1. 常驻监控。网页端先扫码登录,登录态会存成本地 Cookie 文件(Cookie 是浏览器用来证明"你已登录"的凭证,过期后程序会要求重新扫码);移动端要求 App 已登录并停留在目标演出详情页,脚本通过 Appium 服务接管屏幕。
  2. 配置匹配。进入详情页后,脚本按配置里的城市、场次、票档、数量逐项选择,匹配时会自动跳过带"缺货、售罄"字样的条目;移动端同样是"城市 → 票档 → 数量 → 确定"的固定顺序。
  3. 检测与点击。选完参数后脚本轮询购买按钮,识别"立即预订、立即购买、选座购买"等几种状态文本,检测到可购买就立即点击,轮询间隔在快速模式下可压到 0.1 秒级。
  4. 选择与提交。订单确认页按users名单勾选观演人;点击"提交"时会依次尝试多个候选选择器(元素文本 → 属性 → 类名 → XPath),一个失败就换下一个,用来对付页面结构变化。
  5. 重试兜底。移动端一轮失败后程序会重建驱动再试,默认 3 次;网页端遇到"提交缺货登记"就刷新页面等开售,if_listen监听模式则负责盯住未开售的场次。

⏱ 十分钟跑通第一遍

先核对环境:Python 3.9+、最新版 Chrome;移动端路线还需要 Node.js(20.19.0+、22.12.0+ 或 24.0.0+)、Appium 3.1+、Android SDK 和一台已连接的真机或模拟器。最短路径一共五条命令:

克隆仓库并进入目录,成功后本地会多出ticket-purchase目录:

git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase

安装网页路线的 Python 依赖,成功后终端会打印 "Successfully installed ...":

pip install -r damai/requirements.txt

跑一遍环境自检,脚本逐项检查 Python、Node.js、Appium、Android SDK 和设备连接,每项通过都会打印通过标记,失败的项直接给出修复命令:

./check_environment.sh

启动 Appium 服务,它常驻监听 4723 端口;另开一个终端执行curl http://127.0.0.1:4723/status,返回内容里带 "ok" 就说明服务正常:

./start_appium.sh

最后一步前,先把大麦 App 打开、搜索目标演出并进入详情页,再运行抢票脚本:它会先确认 Appium 在跑、配置文件存在,等你输入 y 确认后启动移动端抢票,成功时屏幕打印"抢票流程完成"和总耗时:

./start_ticket_grabbing.sh

只跑网页路线的话,先创建damai/config.json(文件缺失时脚本会把字段模板打印出来供你参考),再执行python damai/damai.py,首次运行会在浏览器里要求你扫码登录。

⚙️ 配置一次讲清

先弄清楚参数从哪里来。在浏览器打开目标演出的详情页,你要填的每一项都在这一个页面上:

移动端路线写在 damai_appium/config.jsonc:

参数含义示例
server_urlAppium 服务地址http://127.0.0.1:4723
keywordApp 内的搜索关键词刘若英
users观演人名单,须与账号实名信息一致["王胜", "潘鸿运"]
city城市,与页面显示完全一致深圳
date场次日期12.06
price票档描述内场1199元
price_index该票档在列表中的位置,从 0 开始5
if_commit_order是否自动提交订单true

网页路线写在damai/config.json:除同样含义的usersif_commit_order外,还有target_url(详情页链接)、datesprices(都是列表,脚本按顺序优先尝试)、if_listen(未开售时是否持续监听)、max_retries(最大重试次数)、fast_mode(缩短各处等待时间)。配置文件整体长这样:

一份完整的移动端示例:

{ "server_url": "http://127.0.0.1:4723", "keyword": "周深", "users": ["王胜", "潘鸿运"], "city": "深圳", "date": "12.06", "price": "内场1199元", "price_index": 5, "if_commit_order": true }

一条建议:首次使用把if_commit_order设为false,空跑一遍确认脚本能进到订单确认页、勾对人,再打开自动提交,避免误下单。

🎫 两类场景的配置思路

两类场景的差别在于"备选方案怎么给"。

热门演唱会:目标是"抢得到就行",按宽度配置。城市给 2-3 个按优先级排序,dates列多个场次,prices留 2-3 个档位,首选档售罄时脚本自动落到下一档,不需要你人工介入。开票即罄的场次,建议提前半小时启动脚本进入监听状态。

固定场次演出(话剧、音乐剧这类):目标是"就那一场",按深度配置。城市、日期各只写一个,票价列表只保留想要的那一档,脚本走的步骤越少,出错的环节就越少。

从页面提取参数和对应配置字段的对照方法:

📶 三个真正影响大麦抢票成功率的做法

优化项很多,真正拉开差距的是时间、分工和网络三件事。

  1. 所有设备同步时间。统一用同一个 NTP 时间服务器(NTP 是网络时间协议,负责把你的系统时钟和网络标准时间对齐),开售前 5-10 分钟让脚本进入监听状态,避免开票瞬间被自己的时钟误差拖慢。
  2. 多设备分工而不是互相竞争。网页端和移动端可以同时跑,但两边配置不同的优先级(不同票档或不同场次),避免同一时刻去抢同一份库存;网络组合上,家宽有线加手机热点是常见搭配。
  3. 把网络做稳。优先有线而非 WiFi,关掉占带宽的应用;网络好的环境下把轮询间隔调短、重试次数给足(网页端max_retries默认 1000 次),用稳定性换响应速度。

❓ 高频故障问答

Node.js 版本不兼容,报Error: Node version must be at least ^20.19.0 || ^22.12.0 || >=24.0.0? 直接升级到满足要求的大版本,macOS 用brew upgrade node,其他系统安装 22.x LTS,再用node --version确认版本已达标。

Android 环境变量没设置,报Error: Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported? 把这两个变量指向你的 Android SDK 目录,例如export ANDROID_HOME=/path/to/android/sdk,同一行再写进~/.zshrc~/.bashrc,以后每次开终端都生效。

设备识别不到,报Error: Unable to find an active device or emulator? 执行adb devices看设备是否在列(ADB 是安卓调试桥,电脑和手机之间通信用的命令行工具):没有设备就检查 USB 调试开关并重新插拔;状态是unauthorized就在手机上点一次授权弹窗。

登录态失效、找不到购买按钮? 先手动登录大麦再启动脚本:网页端会重新生成 Cookie 文件,移动端需要重新进一次详情页再运行。

🔧 往后还能做什么

熟悉代码之后,扩展点主要集中在三处:

  • 修改damai/concert.py里的选择算法,适配新版页面,或调整观演人勾选的降级顺序;
  • 接入通知服务,抢票成功或全部重试失败时推一条消息到手机;
  • 在项目的 Issue 里反馈问题(附上控制台日志),或者直接提交 PR,入口见 README.md。

想看得更细,可以翻 完整使用指南(PC端).md.md)(PC 端参数逐项说明与等待时间对比)和 QUICK_START.md(移动端三步启动的浓缩版);移动端主程序源码在 damai_appium/damai_app_v2.py。

抢到大麦的票,最终取决于两件事:流程是否真的验证过,以及你在时间和网络上留了多少余量。把配置和环境这两关过掉,剩下的就是等开票那一刻。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 14:30:18

汽车电机FOC控制仿真到嵌入式落地的四阶能力跃迁

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 14:29:29

Obsidian第二大脑实战:本地存储、Markdown与双链构建个人知识库

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华