☰
大麦自动抢票怎么跑:3 个 Shell 脚本跑通移动端购票(附配置参数与排障表)
2026/10/31 6:54:17 网站建设 项目流程

大麦自动抢票怎么跑:3 个 Shell 脚本跑通移动端购票(附配置参数与排障表)

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

ticket-purchase 用 Python 做双端抢票:Web 端靠 Selenium 驱动 Chrome 浏览器,移动端靠 Appium(一种在电脑上驱动手机 App 的框架)驱动安卓大麦 App,从选票档到提交订单全自动。三个 Shell 脚本串起自检、启动、执行的全流程,这篇帮你把环境、配置、排障一次理顺。

先做决定:两条路线怎么选

仓库里有两套互相独立的实现,按设备条件二选一即可:

  • Web 端:damai/damai.py 基于 Selenium(一个控制浏览器的 Python 库)操作网页。
  • 移动端:damai_appium/damai_app_v2.py 基于 Appium 操作安卓客户端,作者文档里注明大麦的大部分票只能在 App 端购买,因此移动端是被主推的路线。
对比维度Web 端移动端
环境成本只需 Chrome,ChromeDriver 自动下载Node.js + Appium + Android SDK + 真机或模拟器
上手时间改完配置直接跑还要把设备、详情页全部就位
覆盖场景网页端可见的购票功能App 端票源,覆盖更广
已知限制无额外说明预约类演出未实现;price_index必须预先手动数好

🔍 环境自检脚本:check_environment.sh 与从零到就绪

第一步永远是先跑仓库自带的体检,别手动装环境:

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

check_environment.sh 会逐项核对:Python、Node.js(并检查版本是否够新)、Appium、Android SDK、ADB、已连接的设备、大麦 App 是否安装、4723 端口的 Appium 服务、config.jsonc是否存在。缺什么直接打印安装命令,按提示补齐即可。

缺依赖时按顺序装:

pip install -r damai/requirements.txt # Python 依赖(selenium==4.18.1) npm install -g appium # 全局安装 Appium 服务 appium driver install uiautomator2 # 安卓 UI 自动化驱动

版本红线:Python 3.9+;Node.js 需 20.19.0+ / 22.12.0+ / 24.0.0+(低于这个范围 Appium 会直接报错,见后文排障表);Appium 3.1.0+。

一个容易踩的坑:仓库脚本里硬编码了作者本机的路径。start_appium.sh、start_ticket_grabbing.sh 和 check_environment.sh 中写死了/Users/shengwang/Library/Android/sdk,start_ticket_grabbing.sh 末尾还写死了一个 pypoetry 虚拟环境的 Python 路径。首次使用要全部改成你机器上的实际路径,否则脚本会在环境设置和解释器调用两处失败。

配置参数速查:移动端 config.jsonc 与反直觉字段

移动端的全部参数集中在 damai_appium/config.jsonc:

字段示例值作用与坑点
server_urlhttp://127.0.0.1:4723Appium 服务地址,默认本机 4723 端口
keyword演出关键词App 内搜索用;v2 版假设你已站在详情页,此值主要供核对
users["观演人A", "观演人B"]观演人姓名,脚本按文本精确匹配勾选,须与账号内信息一字不差
city城市名必须与详情页显示逐字一致,见下文
date12.06演出日期,月.日格式
price票档描述仅人类核对用,脚本不读它定位
price_index3票档在列表中的位置,从 0 数起,须手动数好
if_commit_ordertrue新版主程序中该开关实际不生效(提交步骤无条件执行),旧版 damai_app.py 才读取它

两个反直觉项值得单独说:

  • price_index为什么要手动数?新版 App 界面上票档按钮的文本是空字符串,文字定位失效,脚本改成了"在票档容器里取第 N 个可点击元素"(app.md 原话:缺点是需要预先手动写进去)。所以你得打开详情页,从 0 开始数到目标票档,把数填进配置。
  • city为什么必须逐字一致?脚本第一动作就是用UiSelector().text("城市名")精确匹配点击,全半角、繁简差一个字都点不中。

Web 端配置在 damai/config.json,img/config_json.png 是它的一个真实示例:

字段说明
index_url/login_url/target_url首页、登录页、演出详情页地址(即下图红字处要填的 URL)
users观众姓名列表,必填
city/dates/prices城市、场次、票面价,均为数组,可多值
if_listen/if_commit_order监听模式 / 是否提交订单开关
max_retries/fast_mode/page_load_delay可选;默认分别为 1000 次、True(快速模式)、2 秒

🚦 跑一遍:从开售前准备到触发抢票

移动端完整走一遍是三步(顺序不能乱):

  1. 开售前准备。启动模拟器或连接开启 USB 调试的真机,装好大麦 App 并登录;在大麦 App 里搜索keyword对应的演出,让页面停在演出详情页——v2 脚本的起点就是"人已经站在详情页上",这一步不能省。脚本和配置此时也要全部就绪。
  2. 启动服务。./start_appium.sh:脚本设置 ANDROID_HOME、检查设备与大麦 App,然后在 4723 端口拉起服务。
  3. 触发抢票。./start_ticket_grabbing.sh:先验证 4723 服务在线和config.jsonc存在,打印当前配置,等你输入y后才真正开跑。

跑起来后,damai_app_v2.py 内部按固定顺序执行:选城市 → 点预约/购买按钮 → 按索引选票档 → 点加号把数量加到users人数 → 确定购买 → 坐标批量勾选观演人 → 提交订单。任一步失败自动重来,默认最多 3 次、间隔 2 秒,每次重试会重建驱动;整轮结束打印本次流程耗时。

附注:Web 端流程短得多——填好damai/config.json后cd damai && python damai.py,浏览器自动打开并进入target_url,完成流程后页面会停留 5 分钟。

调优:监听模式、重试次数与多设备

  • Web 端监听模式:if_listen设为true后,脚本在等待阶段(比如"缺货登记"按钮)持续守候,适合开售前后蹲守回流票。想更快轮询就调小page_load_delay(默认 2 秒),网络一般再适当调低max_retries(默认 1000)。
  • 移动端没有监听模式:重试次数写死在 damai_app_v2.py 入口的run_with_retry(max_retries=3),想多试几轮直接改这一行。
  • 多设备并行:仓库没有多设备调度,且 capabilities 里deviceName固定为emulator-5554。要并行得改好 capabilities 分别起多个实例,属于自行改造,不在项目文档覆盖范围内。

高频报错排查:现象、原因、解法速查表

现象(报错原文)原因解法
Error: Node version must be at least ^20.19.0 \|\| ^22.12.0 \|\| >=24.0.0Node.js 版本低于 Appium 要求升级 Node(macOS 可brew upgrade node),再node --version确认
Error: Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported环境里没有安卓 SDK 变量export ANDROID_HOME=/你的sdk路径,并同步ANDROID_SDK_ROOT
Error: Unable to find an active device or emulator模拟器没开、真机未授权或 USB 调试未开adb devices确认列表中有device状态;真机重新插拔并点授权
Error: Connection refusedAppium 服务没起或端口被占先./start_appium.sh,再curl http://127.0.0.1:4723/status验证
日志停在"城市选择失败"或票价报错city与页面文字不一致,或price_index数错(从 0 起数)对照详情页逐字核对city,重新数一遍票档位置

边界与建议:使用限制与开售前演练

先认清边界,再谈合规:

  • 预约类演出覆盖不了。app.md 写明"只处理了抢票的,预约的暂未考虑",预约票没有现成路径。
  • 无多设备调度,deviceName写死emulator-5554,并行需要自行改造。
  • 脚本对网络和设备状态不做兜底,网络不稳或设备卡顿只能靠重试机制兜住一部分失败。
  • 仓库声明仅供学习和研究使用,请勿用于商业用途,使用时请遵守大麦网的使用条款。

开售前按这份清单过一遍,开售时基本只剩按y:

  • ./check_environment.sh无 ❌ 项
  • 模拟器或真机就位,大麦已登录
  • App 停在目标演出详情页
  • city、date、users与页面逐字一致,price_index刚数过
  • curl http://127.0.0.1:4723/status有响应

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

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

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

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

立即咨询