把大麦抢票做成流水线Python 双端自动化实践【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchaseticket-purchase 是基于 Python 的大麦自动抢票工具用 Selenium 与 Appium 双平台驱动自动完成登录、选场次票价、勾选观演人与提交订单开票瞬间交给自动化抢票脚本。开票几秒钟手速赢不了热门演出开票时页面上的购买按钮从灰变亮、再到缺货往往只有几秒。人眼看到、手伸过去、点中、再选场次选票价这一串动作每步都有固定开销网络一拥堵就被进一步放大所以手动抢票在热门场次里基本靠运气。还有一个容易被忽略的事实大麦的大部分票源只在 App 端开售网页端只覆盖部分演出。这正是 ticket-purchase 同时做两端、且以安卓端为主线的原因。脚本凭什么比手速快原理与环节耗时速度优势不来自点得快而来自缩短链路、去掉等待轮询代替盯屏脚本按短间隔持续检测购买按钮状态亮起的瞬间触发点击省去人的反应环节。坐标原生点击移动端 v2 版本先取元素中心坐标再用mobile: clickGesture完成一次约 50 毫秒的 tap并把waitForIdleTimeout等等待项设为 0。批量勾选观演人先一次性收集所有观演人坐标再连续点击避免逐个查找元素。内置重试点击或定位失败不会中断而是按配置反复尝试。显式短等待用 2 秒的WebDriverWait替代 5 秒的全局隐式等待。各环节的量级差异大致如下具体数值取决于网络与机器配置方式触发机制开售到提交的大致耗时主要瓶颈纯手动人眼看到按钮亮起后手动点0.2 秒1 秒以上反应时间与网络拥堵Selenium 抢票Web脚本轮询按钮状态0.1 秒0.3 秒部分演出网页端不开售Appium 抢票移动端坐标原生点击 重试0.05 秒0.2 秒设备或模拟器性能 跑起来的完整路径环境、自检与启动第一步取代码并自检环境git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase ./check_environment.shcheck_environment.sh 会依次检查 Python、Node.js要求 20.19 以上、Appium、Android SDK、adb、是否有设备在线、大麦 App 是否已安装核对cn.damai包名、4723 端口服务是否存活最后回显配置里的关键词、城市与观演人。缺什么都会直接给出对应的安装命令不用自己翻文档。移动端抢票还需要一次性的环境准备npm install -g appium appium driver install uiautomator2Web 端只需安装 Python 依赖Selenium 锁定 4.18.1ChromeDriver 会自动下载pip install -r damai/requirements.txt一条真实抢票时间线周深深圳站以仓库自带的 damai_appium/config.jsonc 为例关键词周深、城市深圳、日期12.06、票价内场1199元、索引 5完整时间线如下时刻发生了什么T-1h环境自检通过先用一场非热门演出完整试跑一遍流程T-15min./start_appium.sh拉起服务模拟器打开大麦搜索周深停在深圳站详情页T-5min配置与页面对账城市、日期、票价文案与索引和页面显示逐项一致T0./start_ticket_grabbing.sh启动开售瞬间脚本检测到购买按钮亮起并点击T3s场次、票价第 5 个索引、2 名观演人被批量勾选订单自动提交脚本需要停在的详情页长这样人在这条时间线里只做一件事——开售前把 App 停在演出页其余环节都由脚本接管。⚙️ 配置参数逐项说明移动端配置在 damai_appium/config.jsoncjsonc 格式允许写注释一行管一件事{ server_url: http://127.0.0.1:4723, keyword: 周深, users: [王胜, 潘鸿运], city: 深圳, date: 12.06, price: 内场1199元, price_index: 5, if_commit_order: true }server_urlAppium 服务地址和端口默认 4723。keyword在 App 里搜演出的关键词。users观演人名单姓名必须与账号里登记的完全一致。city演出页面上的城市文案要和页面显示完全一致不能用简称。date场次日期月.日格式如 12.06。price目标价位文案主要供人工核对用。price_index目标价位在列表中的索引从 0 开始。App 改版后页面上票价 Text 变为空串v2 版本改用索引定位这是最容易被配错的一项。if_commit_order订单确认页加载后是否自动提交订单。配置项与页面元素的对应关系决定了成败任何一项对不上脚本都会点到按钮却选不对价位Web 端配置在damai/config.json字段略有不同index_url、login_url、target_url分别指定首页、登录页和目标演出页dates与prices是数组支持2026-04-114月11日等多种写法的模糊匹配if_listen控制是否监听缺货登记max_retries默认 1000控制轮询重试上限fast_mode默认开启缩短等待时间官方标注可提速 40%75%page_load_delay默认 2 秒是订单确认页的加载等待。目录与核心文件ticket-purchase/ ├── damai/ # Web 端Selenium │ ├── damai.py # 主程序配置校验、选座、提交流程 │ ├── concert.py # 演唱会业务逻辑 │ ├── config.py # 配置类 │ └── requirements.txt # Python 依赖 ├── damai_appium/ # 移动端Appium │ ├── damai_app_v2.py # 优化版主程序推荐使用 │ ├── damai_app.py # 初版实现 │ ├── config.py # 配置加载 │ └── config.jsonc # 移动端配置 ├── tests/ # pytest 测试套件 ├── check_environment.sh # 环境自检 ├── start_appium.sh # 启动 Appium 服务 └── start_ticket_grabbing.sh # 启动抢票两个主程序各自管一个端damai/damai.pySelenium 抢票入口流程为配置校验、打开页面、选场次与票价、勾选观演人、重试提交成功后页面保留 5 分钟供人工确认。damai_appium/damai_app_v2.pyAppium 抢票入口包含前文提到的全部提速策略并打印执行进度实现细节可在 damai_appium/app.md 里查到。 常见报错与排查报错信息原因处理办法Node version must be at least ^20.19.0 ...Node 版本过低macOS 用brew upgrade node或用 nvm 切换到兼容版本Neither ANDROID_HOME nor ANDROID_SDK_ROOT ...SDK 环境变量未导出在~/.zshrc或~/.bashrc里加export ANDROID_HOME...Unable to find an active device or emulator设备未连接或未被识别确认 USB 调试已开adb devices核对adb kill-server adb start-server重启服务Connection refusedAppium 未启动或 4723 被占用lsof -i :4723找出占用进程curl http://127.0.0.1:4723/status验证恢复城市、价位选不上配置文案与页面不一致逐字核对 city、date、priceprice_index 确认从 0 计数Web 端另有两类退出提示config.json语法错误、缺少必填字段如target_url时damai.py 会打印缺少的字段名并直接退出按提示补齐即可不会静默失败。进阶多设备协同、回流票与调参双端双保险同一场演出两台机器分别跑 Web 端与移动端覆盖网页端不开售的场次。多移动设备不同网络有线 4G 热点下跑多个模拟器实例互不干扰。回流票开售后 30 分钟到 2 小时内常有退票回流。移动端没有独立的监听参数持续守候靠内置重试循环实现让脚本常驻、等它轮询命中即可Web 端则可用配置里的if_listen开关监听缺货登记。调参方向弱网时降低max_retries、拉长轮询间隔强网时保持fast_mode开启、把page_load_delay压到 1 秒让订单确认页更快落地。收尾先合规再一键启动项目声明仅供学习和研究使用请勿用于商业用途。使用时遵守大麦的服务条款与平台规则练习建议用专用账号网络保持稳定并在开售前完成全部环境准备。开售前检查三件事环境自检通过、App 停在目标演出页、配置与页面逐项对过账。然后./start_appium.sh # 终端 1拉起 Appium ./start_ticket_grabbing.sh # 终端 2启动大麦抢票脚本 # Web 端 cd damai python damai.py剩下的交给脚本。【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考