news 2026/9/24 17:02:52

大麦自动抢票指南:Python Selenium + Appium 双端抢票脚本完整教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大麦自动抢票指南:Python Selenium + Appium 双端抢票脚本完整教程

大麦自动抢票指南:Python Selenium + Appium 双端抢票脚本完整教程

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

ticket-purchase 是一个 Python 大麦自动抢票脚本:Web 端用 Selenium 驱动浏览器,移动端用 Appium 做大麦 APP 自动化,通过一份配置文件锁定艺人、城市、场次和票价。本文按选型、环境、配置、运行、排障的顺序讲清楚它怎么用。

脚本功能清单:工具替你自动做了哪几件事

工具覆盖"定位演出 → 选场次 → 选票价 → 选观演人 → 提交订单"整条链路,每一步都有对应参数可控。

  • 登录态复用:Web 端首次扫码后把 Cookie 存入damai_cookies.pkl,再次运行时自动恢复,不用重复扫码
  • 场次锁定:城市、场次日期、票价三个字段与页面一一对应,移动端另用price_index按序号(从 0 开始)精确定位第 N 个票价卡片
  • 观演人自动勾选:users列表指定姓名,移动端先逐个采集屏幕坐标再连续点击,间隔 10ms
  • 数量联动:配置 2 名观演人时,脚本自动把数量加号点 1 次
  • 订单提交:if_commit_order为 true 时,选完观演人后自动点击"立即提交"
  • 重试兜底:移动端单次失败后重建 Appium 会话、隔 2 秒重试,上限 3 次;Web 端max_retries默认 1000 次

大麦抢票端选型:Web 端与移动端对比表

两端都是完整链路,但前置条件不同:移动端单次动作更快(显式等待被压到 2 秒),Web 端更适合长驻监听开售前状态。

维度Web 端(damai/)移动端(damai_appium/)
自动化框架Selenium + ChromeAppium + UiAutomator2
运行前提最新版 Chrome,ChromeDriver 自动下载Android 真机/模拟器 + Appium 服务(默认 4723 端口)
登录方式脚本引导扫码,Cookie 存文件复用设备内提前手动登录,脚本不处理登录
脚本启动时的状态自行打开target_url必须已打开大麦 APP 并停在目标演出详情页
配置文件damai/config.jsondamai_appium/config.jsonc(JSONC 格式,支持注释)
适合场景电脑可长时间挂着,开售前持续轮询APP 端链路更稳定、或 Web 端被限制时

环境准备:版本要求与检查命令

版本要求仓库里写得很明确,没有模糊空间:Python ≥ 3.9;Node.js 为 20.19.0+ / 22.12.0+ / 24.0.0+;Appium ≥ 3.1.0;移动端另需 Android SDK 并导出ANDROID_HOME,Web 端需最新版 Chrome。

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

移动端还需执行npm install -g appiumappium driver install uiautomator2check_environment.sh会依次检查 Python、Node、Appium、ADB、设备连接、大麦 APP 是否安装(包名cn.damai)、4723 端口状态与配置文件,随时可重复执行。

配置字段对照表:每个参数对应页面上哪个位置

所有字段都对应页面上"看得见的文字",建议对着真实演出详情页逐项填写。

移动端damai_appium/config.jsonc各字段:

字段对应页面位置说明
server_url非页面元素Appium 服务地址,默认http://127.0.0.1:4723
keywordAPP 顶部搜索框用来定位演出的关键词
users观演人选择列表姓名需已在大麦 APP 观演人列表中提前添加
city详情页顶部城市栏脚本按文本精确匹配
date场次日期区格式为"月.日",如12.06
price目标票价卡片文字供核对用,如"内场1199元"
price_index票价卡片序号从 0 开始计数,实际用于点击定位
if_commit_order"立即提交"按钮true 时自动点击
{ "server_url": "http://127.0.0.1:4723", "keyword": "周深", "users": ["观众甲", "观众乙"], "city": "深圳", "date": "12.06", "price": "内场1199元", "price_index": 5 }

Web 端damai/config.json结构不同:target_url(演出详情页直链)、userscitydatesprices(后三项均为列表,可配置多个场次和多个价格),另有三个控制开关:if_listen(是否进入监听状态)、max_retries(最大重试次数,默认 1000)、page_load_delay(订单页加载等待秒数,默认 2)。

运行流程:从 Appium 会话到订单提交的 7 步

移动端脚本启动后在一个会话内按固定顺序执行 7 步,每步都有超时,超时先换备用选择器,全部失败则本次尝试终止并进入重试。

  1. 建会话:以 UiAutomator2 能力连接server_url,禁用窗口动画,显式等待设为 2 秒
  2. 选城市:1.5 秒超时,依次尝试 text 精确匹配、textContains、XPath,全失败即终止
  3. 点预约入口:先按容器 ID 定位,备用方案是匹配"预约 / 购买 / 立即"文本
  4. 选票价:尝试点击票价容器中price_index位置的 FrameLayout 坐标(页面上该卡片 text 可能为空),失败则等容器出现后重试
  5. 选数量:存在数量控件时,按 n 人点 n−1 次加号
  6. 选观演人:每人最多等 2 秒采集坐标,随后连续执行mobile: clickGesture,间隔 10ms
  7. 提交订单:if_commit_order为 true 时点击"立即提交",备用 XPath 匹配"提交/确认"

一次尝试失败后,脚本quit()会话、重建后隔 2 秒再来,最多 3 次。Web 端流程不同:先自动检查 ChromeDriver,再恢复 Cookie(没有则引导扫码并保存),打开target_url后进入轮询,直到目标票价可点,循环上限即max_retries(默认 1000),订单页加载等待page_load_delay2 秒。

故障自查:4 个常见报错与检查命令

排障按"报错原文 → 原因 → 单条命令验证"的顺序走,多数问题一条命令即可定位。

现象可能原因检查命令
Node version must be at least ^20.19.0…Node 版本过低node --version,确认后升级
Unable to find an active device or emulatoradb 下没有可用设备adb devicesadb shell getprop sys.boot_completed确认完全启动
Connection refused(4723)Appium 未启动或端口被占curl http://127.0.0.1:4723/statuslsof -i :4723
Neither ANDROID_HOME nor ANDROID_SDK_ROOT exportedSDK 环境变量未设置export ANDROID_HOME=<SDK路径>后重跑adb devices

设备在线但脚本超时的情况,用adb shell pm list packages \| grep damai核对 APP 包名与脚本能力里写的appPackagecn.damai)是否一致。

进阶参数:多设备并行与等待超时的调整

可调参数集中在damai_appium/damai_app_v2.py的能力字典和等待常量里,Web 端只有max_retriespage_load_delay两个。

  • 多设备并行:每台设备起一个 Appium 实例(4723 / 4724 / 4725 依次递增),每份脚本的server_url指向各自端口
  • 会话空闲超时:newCommandTimeout默认 6000 秒,超时自动断开
  • 速度类参数:显式等待 2 秒、快速点击等待 1.5 秒、waitForSelectorTimeout300ms;设备老、页面慢时把它们放宽,减少误判失败
  • 性能类参数:mjpegServerFramerate=1disableWindowAnimation=true用于降低截图开销,保持默认即可

合规边界:个人使用的前提

这个工具的定位是个人账号下的自动化练习,使用前要守住几条边界。

  • 遵守大麦网用户协议,仅用于个人合理购票,不做倒卖等商业用途
  • 脚本只模拟正常页面的点击操作,不调用私有接口,不绕过风控校验或验证码
  • 建议用专门账号运行,网络保持稳定,开售前 30 分钟启动并确认会话建立
  • 若账号触发平台风控或受到限制,先停止使用

项目许可限定于学习与研究用途,商用不受许可保护。

收尾:去哪读源码

移动端主逻辑集中在 damai_appium/damai_app_v2.py(约 290 行),Web 端逻辑分布在 damai/concert.py,想逐步核对每步选择器写法时按这两个文件顺序读即可。

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

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

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

高速传输灵活交付 金士顿移动存储赋能项目全周期数据流转迁移

乙方项目归档交付应包含完整项目的原始素材、源文件、多版迭代稿件、最终成片与交付文档等等。而实际上&#xff0c;很多行业往往需要混合办公、跨地协作&#xff0c;依托网盘存储看似便利实际暗藏隐患&#xff0c;不仅容易出现版本错乱、链接过期、文件压缩损坏、画质音质失真…

作者头像 李华
网站建设 2026/9/24 16:57:10

yaml-cpp 安装指南:5 步从源码到跑通第一个 YAML 解析

yaml-cpp 安装指南&#xff1a;5 步从源码到跑通第一个 YAML 解析 【免费下载链接】yaml-cpp A YAML parser and emitter in C 项目地址: https://gitcode.com/GitHub_Trending/ya/yaml-cpp yaml-cpp 是一个符合 YAML 1.2 规范的 C 库&#xff0c;负责在 C 程序里解析和…

作者头像 李华
网站建设 2026/9/24 16:56:36

零售数据分析:如何用用户行为数据把“转化率“从3%提到8%?

做电商和零售的朋友&#xff0c;应该都对转化率这个词特别敏感。同样的流量&#xff0c;转化率3%和8%&#xff0c;业绩差的可不是一点半点。很多人转化率上不去&#xff0c;就知道瞎优化主图、改价格&#xff0c;折腾来折腾去&#xff0c;效果微乎其微。其实转化率不是靠感觉调…

作者头像 李华
网站建设 2026/9/24 16:54:56

Quick 入门实战:在 Xcode 项目中配置 Swift / Objective-C 单元测试

测试开发工具 【免费下载链接】Quick The Swift (and Objective-C) testing framework. 项目地址&#xff1a; https://gitcode.com/gh_mirrors/qu/Quick 点击查看 免费下载 本篇指南围绕 Quick 测试框架的使用前置环节——在 Xcode 工程中正确搭建测试 Target 与跨语言测试桥…

作者头像 李华