
大麦抢票自动化工具 ticket-purchase 双端跑通三步走附完整环境自检指南【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchaseticket-purchase 是一个同时支持 Web 端和移动端的大麦抢票自动化项目把选城市、选场次、选票价、勾选观演人、提交订单这一整套动作交给脚本自动完成。它适合两类读者想借真实项目理解 Appium移动端 UI 自动化框架与 Selenium浏览器自动化框架写法的开发者以及真打算用脚本抢热门演出票的用户。项目里 damai/ 和 damai_appium/ 是两条完全独立的技术路线各有入口、各有配置互不依赖可以只挑一端跑。环境自检清单抢票前必查的 6 项动手之前先把下面的依赖核一遍。关键点是Web 端和移动端的依赖几乎是两套不重叠的东西只抢 Web 票的人不用碰 Node.js。依赖项版本要求哪端需要验证方式Python3.9双端python --versionChrome最新版 ChromeDriver自动下载Web浏览器能正常打开Node.js20.19.0 / 22.12.0 / 24.0.0移动端node --versionAppium uiautomator2 驱动3.1.0移动端appium --versionAndroid SDK 环境变量已导出ANDROID_HOME/ANDROID_SDK_ROOT移动端adb devices装了大麦 APP 的 Android 设备真机或模拟器移动端adb shell pm list packages \| grep damai仓库根目录的check_environment.sh会按顺序输出以上每一项的状态哪项缺失就提示安装命令Web 端还有damai/check_environment.py和quick_diagnosis.py两个 Chrome 环境自检脚本可以单独跑。最小路径跑通克隆到启动只要 3 个命令双端共用的部分就是克隆、装依赖、运行。git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase poetry install # 或 pip install -r requirements.txt仓库把selenium4.18.1固定住了Poetrypyproject.toml是推荐装法测试走 pytest配置了 80% 覆盖率门槛。只跑移动端还需要多做四步装 Node.js、npm install -g appium、appium driver install uiautomator2、导出 SDK 环境变量。之后按三步节奏走./start_appium.sh # 启动 Appium 服务器端口 4723 ./start_ticket_grabbing.sh # 执行抢票任务中间夹着一个容易忽略的手工动作先在设备上打开大麦 APP搜索目标演出并停在详情页——脚本只从这里接手。作者特意省掉了输入关键词 点搜索这两步因为开售前那几秒最值钱。Web 端更简单编辑damai/config.json后执行cd damai python damai.py即可。跑通后页面会保持 5 分钟方便人工确认订单状态。配置最容易踩坑的字段4 个重点细看两端配置互不相干移动端是damai_appium/config.jsoncWeb 端是damai/config.json。字段不用逐个背但下面四个直接决定成败字段所属端作用坑位price_index移动端目标票价从 0 开始的位置必须事先在 APP 界面人工数出来票档顺序一变就点错users双端观演人姓名列表同时决定购票张数姓名必须与 APP 里已添加的观演人完全一致if_commit_order双端是否自动提交订单调试时开true会真实下单target_urlWeb 端目标演出详情页 URL脚本只在这个页面上操作地址贴错全盘皆输price_index的来历有点无奈大麦 APP 更新后票价按钮的文本 Text 变成了空串按文本定位彻底失效V2 版才改成在票价容器project_detail_perform_price_flowlayout里按索引取第 N 个可点击的 FrameLayoutdamai_appium/app.md 里也承认这个方案需要预先手动写进去。Web 端则是按文本匹配prices写成列表会按顺序尝试并自动跳过含缺货售罄的票档。校验逻辑两端不一样严移动端Config.load_config()直接按 8 个固定键json.load缺任何一个都抛KeyErrorWeb 端check_config_file()会做文件存在、必填字段index_url/login_url/target_url/users、users非空三层检查不过关就打印配置模板并退出这个行为对新手很友好。它为什么快三个性能设计决策抢票是毫秒级的竞争damai_appium/damai_app_v2.py 里的取舍全部偏向速度。第一个是用原生手势替代标准点击。标准element.click()要等元素进入可点击状态多一次与驱动服务器的往返ultra_fast_click只等元素出现读取rect中心坐标后直接执行mobile: clickGestureAppium 原生点击手势duration 压到 30–50ms。这要求 Appium 服务器加--relaxed-security启动。第二个是把礼貌性等待全部关掉。驱动 settings 里waitForIdleTimeout、actionAcknowledgmentTimeout、keyInjectionDelay一律置 0waitForSelectorTimeout降到 300msCapabilitiesAppium 会话参数里还带disableWindowAnimation: true关动画、mjpegServerFramerate: 1降截图帧率。显式等待统一用 2 秒的WebDriverWait替代常规 5 秒隐式等待。第三个是批量勾观演人。逐人找元素→点击太慢ultra_batch_click先把所有观演人坐标一次性收集完再以 30ms 点击、10ms 间隔连续打出去——注释里叫它几乎一次性全部点击。Web 端思路一致默认开启的fast_mode把等待从 0.5 秒级压到 0.1–0.2 秒级并跳过大量页面扫描输出。进阶与稳定性重试机制和多路选择器单次尝试的成功率不是 100%项目靠多试几次 每条路都留后手来补。移动端入口run_with_retry(max_retries3)在每次失败后会打印本次耗时、driver.quit()清掉会话残留、重新初始化驱动再试。流程内每一步也都备了一串选择器依次降级选城市用精确文本 → textContains → XPath三级提交订单用立即提交 → 正则匹配提交/确认 → XPath 包含三级。Web 端的_submit_order()更彻底按按钮文本立即提交/提交订单/去支付等、view-name属性、class 名、原始 XPath 四路依次尝试全部失败才提示手动点击购买按钮还套着一个默认max_retries1000 次的轮询循环盯住按钮从立即预订变可提交为止。两个兜底细节值得了解万一跳到选座购买页choice_seat()会提示请快速选择您的座位人工点完座位后脚本自动点确认登录走 Cookie 持久化首次运行扫码一次并存入damai_cookies.pkl之后只注入.damai.cn域 Cookie不用再扫码。常见报错自查按错误文本三步定位出问题时先看报错原文绝大多数是环境问题而非脚本问题报错现象原因修复Error: Node version must be at least ^20.19.0 \|\| ^22.12.0 \|\| 24.0.0Node.js 版本过旧brew upgrade node升到兼容版本Error: Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exportedSDK 环境变量未导出export ANDROID_HOME...并同步导出ANDROID_SDK_ROOTError: Unable to find an active device or emulator设备未在线或版本不匹配adb devices确认连接、开启 USB 调试Capabilities 里硬编码了platformVersion: 16和deviceName: emulator-5554真机或别的模拟器要照实改Error: Connection refusedAppium 未启动或端口不符curl http://127.0.0.1:4723/status验证确认server_url与启动端口一致还有一个容易漏的事实根目录三个 shell 快捷脚本里硬编码了作者机器上的 macOS SDK 绝对路径/Users/shengwang/Library/Android/sdk等在自己机器上跑之前得先改成自己的路径。目录速览想深入时从哪读起位置角色damai/Web 端damai.py入口、concert.py核心流程、config.py/config.jsondamai_appium/移动端damai_app_v2.py优化版主程序、damai_app.py原版、config.jsonctests/pytest 单元与集成测试根目录.sh脚本check_environment.sh环境自检、start_appium.sh起服务、start_ticket_grabbing.sh跑任务阅读路线建议移动端按_setup_driver()→run_ticket_grabbing()城市 → 预约按钮 → 票价 → 数量 → 确定 → 选人 → 提交共七步→run_with_retry()的顺序过一遍damai_app_v2.pyWeb 端先看damai/damai.py的三层配置校验再到 damai/concert.py 里跟choose_ticket()城市→场次→票价→数量和_submit_order()走一遍就能看清选什么和怎么点两条线。使用边界版本敏感与合规声明⚠️ 这个项目本质是匹配页面元素所以对版本高度敏感页面资源 IDtrade_project_detail_purchase_status_bar_container_fl、platformVersion、deviceName、price_index都是写死的大麦 APP 或网页一改版就得重新校准预约约票功能目前未实现只有抢票链路。实际使用时建议专门准备测试账号、保持网络稳定并让脚本在开售时间准点运行。以上内容仅供学习研究参考实际使用请遵守大麦平台服务条款及相关规定。【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考