尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

从 0 到提交订单如何完整跑通大麦抢票:ticket-purchase 双端方案实操指南

发布时间:2026/9/24 14:50:38

资讯中心
01
ARTICLE

从 0 到提交订单如何完整跑通大麦抢票:ticket-purchase 双端方案实操指南

从 0 到提交订单如何完整跑通大麦抢票:ticket-purchase 双端方案实操指南
从 0 到提交订单如何完整跑通大麦抢票ticket-purchase 双端方案实操指南【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchaseticket-purchase 是一个开源的大麦自动抢票项目 移动端用 Appium 驱动大麦 APPWeb 端用 Selenium 操控 Chrome两端各自独立配置、独立运行支持按观演人、城市、日期场次、价格选择下单并用原生坐标点击加内置重试机制来抢开售瞬间。整条链路按四步串起来选路 → 备环境 → 改参数 → 启动验证。先选抢票路线APP 端是主链路Web 端做备选这一节回答开工前的第一个问题票到底该用哪端抢。仓库里是两套互不依赖的实现damai_appium/ 管移动端damai/ 管 Web 端配置和流程各走各的。为什么 APP 端是主链路项目笔记里写得很直白大麦的大部分票只能在 APP 里买Web 端只是有 PC 详情页时的备选路线。目标场次在 APP 里有购买入口的话直接走移动端。两端也能同时上同一场次手机上跑 APP 端电脑上跑 Web 端谁先出单算谁的。三条命令搭好 Appium 抢票环境这一节覆盖抢票前必须敲完的三件事克隆仓库、装 Python 依赖、装 Appium。硬件和系统要求不高卡在软件版本上Python 3.9Node.js 必须是 20.19.0、22.12.0 或 24.0.0Appium 是 Node 程序版本不够会直接拒绝启动Appium 3.1.0还要装配套的 UiAutomator2 驱动真机或模拟器用都得把 Android SDK 的环境变量 ANDROID_HOME / ANDROID_SDK_ROOT 配好。先克隆仓库、装依赖git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase pip install -r damai/requirements.txtdamai/requirements.txt 把 selenium 锁在 4.18.1仓库根目录还有 pyproject.toml 走 Poetry 管理用poetry install也可以。再装 Appium 本体和驱动npm install -g appium appium driver install uiautomator2最后验证设备adb devices输出里要能看到你的模拟器或真机。也可以先跑根目录的 check_environment.sh 做一键自检。Web 端这边要求最少装最新版 Chrome 就行ChromeDriver 由 damai/check_environment.py 在构造浏览器时自动检查获取不用手动管。两分钟配好双端参数这一节解决两份配置到底改哪里改完一场演出不用再动。移动端就一个文件damai_appium/config.jsonc最小示例{ server_url: http://127.0.0.1:4723, keyword: 周深, users: [观演人1, 观演人2], city: 深圳, date: 12.06, price: 内场1199元, price_index: 5, if_commit_order: true }字段作用什么时候改server_urlAppium 服务器地址启动端口不是 4723 时keywordAPP 搜索关键词换演出时先手动搜进详情页users观演人名单人数即票数观众有变时city演出城市与页面城市按钮文本对齐date演出日期与详情页场次对齐price票价描述与price_index指向的位置保持一致price_index第几个票价按钮的位置从 0 数票档位置一变就必须重数if_commit_order是否自动提交订单想空跑验证流程时设为 false有个坑要提前说config.py 的加载逻辑按固定键名逐字段取值八个字段一个都不能少缺一个直接 KeyError所以改键名、动顺序都会出问题。price_index 是人工数出来的位置这个字段是移动端最反直觉的一个值得单独说清来历。大麦 APP 某次更新后票价按钮在页面上的文本 Text 变成了空串旧版按文本找按钮的做法整体失效。V2 版换了思路在票价容器里按索引找第 N 个可点击的 FrameLayoutN 就是price_index。代价是得人工在界面上数打开详情页从左到右看目标票档排第几个从 0 起数把数字写进配置。票档位置变了加场次、加票档就会点错必须重数。首次直接定位失败时还有一层备用方案先用 WebDriverWait 等票价容器出现再重试一次。Web 端 config.json场次和票档都能写成列表Web 配置在 damai/config.json字段比移动端多写法也不一样。必填的四个index_url大麦首页首次扫码登录用、login_url登录页、target_url目标演出详情页地址、users观演人名单不能为空人数决定票数。真正灵活的是两个列表dates放多个场次日期prices放多个票面价脚本按你写的顺序逐个尝试遇到标着缺售罄的票档自动跳过——等于把候补场次和候补票档都堆进去买到第一个有货的为止。if_listen是缺货登记按钮的开关代码直接读这个键不能省if_commit_order决定要不要自动提交订单max_retries默认 1000 次fast_mode默认开启把各步等待从 0.5 秒级压到 0.1–0.2 秒级并跳过大量页面扫描输出page_load_delay默认 2 秒管订单确认页的加载等待。进流程前 damai.py 会先做三道校验文件存在、四个必填字段齐全、users非空任何一条不过就打印模板直接退出所以第一次跑报的错多半在这一步。大麦抢票成功的三步从启动服务到提交订单这一节是全部流程里唯一需要背的操作序列一个终端起 Appium手机手动进详情页一条命令跑脚本。APP 端先手动进详情页再交给脚本接管第一步启动 Appium注意加--relaxed-securityappium --address 0.0.0.0 --port 4723 --relaxed-security这个参数解锁了脚本重度依赖的原生点击手势——不走常规点击通道直接朝坐标落指。第二步手机上打开大麦 APP搜到目标演出停在详情页。V2 特意删掉了输入搜索的步骤脚本从详情页开始接管选城市 → 点预约/购买按钮 → 按索引点票价 → 有数量栏时把加号点票数 − 1次、每次间隔 20 毫秒 → 确定购买 → 批量勾选观演人 → 按立即提交。每一步都带备用选择器城市会依次试精确文本、包含文本、XPath 三种写法提交按钮先按立即提交文本、再试提交/确认正则、最后 XPath 兜底。第三步执行脚本cd damai_appium python damai_app_v2.py入口 run_with_retry() 默认试 3 次失败会打印本轮耗时关闭并重建驱动隔 2 秒再试想多试几轮就调大 max_retries。也可以用根目录的 ./start_appium.sh 和 ./start_ticket_grabbing.sh 两个快捷脚本但它们把作者本机的 Android SDK 路径和 Python 路径写死了换机器先改这两处。Web 端Selenium 抢票扫码一次之后自动轮询票档在 damai 目录下运行cd damai python damai.py。链路是配置校验 → 加载参数 → 建浏览器顺带自动检查 ChromeDriver→ 进详情页 → 开轮询。登录走 Cookie首次运行时打开首页引导扫码成功后把 Cookie 存进 damai_cookies.pkl之后从文件恢复、只注入 .damai.cn 域不用第二次扫码。进详情页后脚本先按 URL 是否含 m.damai.cn 区分移动/PC 页面再按城市 → 场次 → 票价 → 数量的顺序依配置选随后进入轮询循环等购买按钮亮起来依次识别立即预订立即购买选座购买缺货登记最后一种受 if_listen 开关控制并处理两种特殊状态提交缺货登记刷新目标页等开售和弹窗里的不立即预订链接。如果跳到选座页脚本会喊请快速选择您的座位你手动点完座位它自动点确认。提交订单做了四重容错按钮文本立即提交、提交订单、提交、确认、立即支付、去支付、支付→ view-name 属性 → class 名submit-button、bui-btn-contained 等→ 原始 XPath全失败才提示手动点。成功后页面停留 5 分钟方便你当场核对订单和支付。大麦自动抢票脚本怎么省时间原生点击与批量坐标点击这一节解释移动端脚本为什么比手动点快以及它拿什么做了交换。最大的收益在点击层。常规 Appium 的 element.click() 要先等元素进入可点击状态脚本不等ultra_fast_click 只等元素出现立刻取 rect 中心坐标调原生手势 mobile: clickGesture 落点时长 50 毫秒勾观演人更狠ultra_batch_click 先把所有勾选框坐标一口气收集齐再连续点击单次时长 30 毫秒、点击之间只留 10 毫秒——对应项目笔记里收集坐标信息几乎一次性全部点击。驱动层把等待也整体调空waitForIdleTimeout、actionAcknowledgmentTimeout、keyInjectionDelay 全部置 0waitForSelectorTimeout 从 500 毫秒压到 300 毫秒元素等待用 2 秒的 WebDriverWait 顶掉旧的 5 秒隐式等待capabilities 里还关了窗口动画、把截图帧率降到 1。代价同样明显等待普遍变短单步失败率上升所以健壮性整体交给了前面说的重试机制——速度优先失败重建。顺带点一下最常改的位置演出参数在 damai_appium/config.jsonc 和 damai/config.json 两份配置里damai_appium/damai_app_v2.py 的 capabilities 写死了deviceName: emulator-5554和platformVersion: 16真机或其他版本模拟器必须改这两行根目录两个 .sh 是启动入口同样带作者本机路径。抢票报错 30 秒排查症状-原因-动作速查这一节把运行脚本时最常见的坑收成一张表照症状对动作不用通读文档。症状最可能的原因先做什么Node version must be at least ^20.19.0 \|\| ^22.12.0 \|\| 24.0.0Node 版本太老Appium 拒绝启动用 brew upgrade node 升到任一兼容版本Neither ANDROID_HOME nor ANDROID_SDK_ROOT ... exportedAndroid SDK 环境变量没导出在终端 export 两个变量或写进 shell 配置Unable to find an active device or emulator没连设备或脚本里写死的设备信息与真机不符adb devices看设备在不在开 USB 调试核对 capabilities 的 platformVersion 与 deviceNameConnection refused4723 端口Appium 没起或端口被占curl http://127.0.0.1:4723/status验活server_url与启动端口对齐票价按钮定位不到APP 改版动票档布局或price_index数错了打开详情页重数目标票档位置从 0 起更新配置三条常用自检命令adb devices确认设备在线adb shell getprop ro.build.version.release和adb shell getprop sys.boot_completed确认系统版本与开机完成adb shell pm list packages | grep damai确认大麦包 cn.damai 已装启动入口 .launcher.splash.SplashMainActivity与脚本 capabilities 一致。最后三句提醒遵守大麦的使用条款建议用专门的测试账号网络要稳开售前就让脚本处于运行状态页面资源 ID、设备版本、票价索引全是硬编码大麦改版后第一反应应该是重新校准 price_index 与选择器。预约场景暂未支持目前只覆盖购买。【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。