我用Python写了个大麦自动抢票助手:从开票前10分钟焦虑到开票3秒出票 我用Python写了个大麦自动抢票助手从开票前10分钟焦虑到开票3秒出票【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase写在前面ticket-purchase 是一个同时支持 Web 端Selenium与移动端Appium的大麦自动抢票开源项目核心能力是自动选择人员、城市、日期场次与票价并提交订单。这篇文章不聊空洞的效率革命只讲我从第一行命令到真实抢到票的完整经历以及那些没人提醒你、但一定会踩的坑。一次真实的开票现场我做了什么周五 19:58距离某歌星上海站开票还有两分钟。我左手端着手机右手悬在鼠标上页面已经提前刷到详情页——结果一开票座位图转了三圈再一刷新已售罄三个字静静躺在屏幕上。那是我第三次手动失败。第三次之后我意识到问题从来不是手速而是我永远比服务器慢半拍。于是那个周末我找到了这个叫 ticket-purchase 的开源项目用了一晚上跑通下一次开票从点击立即购买到订单提交成功大约 3 秒。先搞清楚它到底能替你做什么项目根目录下有两个平行模块对应两条不同的抢票路线模块技术栈适用场景damai/Selenium Chrome电脑上跑适合桌面党damai_appium/Appium UiAutomator2连接 Android 真机或模拟器当前主力方案它的工作方式简单说就四步登录优先 Cookie失效则扫码→加载购票参数→轮询票源状态未开售就一直等开售立刻抢→自动选择城市/场次/票价/观演人并提交订单。整个执行链路在项目的流程图里画得很清楚我放一张你感受下这套逻辑让我可以提前配好所有参数开票那一刻它负责手速我只负责盯着控制台输出。最小跑通路径从克隆到第一次运行如果你是第一次接触这类工具别急着读源码按下面这条最短路径走20 分钟内能见到脚本动起来。第一步克隆项目git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase第二步环境一键体检项目自带一个check_environment.sh它会依次检查 Python、Node.js需 20.19.0、Appium、Android SDK、ADB、设备连接状态、大麦 APP 是否安装以及 Appium 服务器是否在跑每一项给出明确 ✅/❌ 提示./check_environment.sh这一步能省掉你 80% 的排查时间。缺哪项补哪项脚本会直接告诉你安装命令。第三步填一份最小配置编辑damai_appium/config.jsonc只改 5 个字段就够跑{ server_url: http://127.0.0.1:4723, keyword: 周深, users: [王胜, 潘鸿运], city: 深圳, date: 12.06, price: 内场1199元, price_index: 5, if_commit_order: true }第四步两个脚本按顺序启动./start_appium.sh ./start_ticket_grabbing.sh第一个脚本拉起 Appium 服务器并做设备预检第二个脚本会读取配置、二次确认后进入自动抢票循环。前提是手机上已经打开大麦 APP 并停留在目标演出的详情页。依赖安装方面项目推荐 Poetrypoetry install用 pip 装requirements.txt也一样能跑。配置文件的每个字段我都替你踩过坑配置是整个工具的大脑config.jsonc里每个字段都有讲究。我逐个拆给你看。server_urlAppium 服务器地址默认http://127.0.0.1:4723一般不用动。改动它之前先确认curl http://127.0.0.1:4723/status有返回。keyword搜索关键词用于脚本定位演出。建议写全名比如周杰伦比周董稳。users观演人名单数组格式必须与大麦账号里已添加的观演人姓名逐字一致多一个字少一个字都会导致勾选失败。city城市名格式要和页面完全一致。这是一个高频踩坑点详见下一节。date移动端格式是MM.DD如12.06Web 端则是YYYY-MM-DD如2023-10-28。两个端格式不同混用必挂。price票价档位文本移动端建议带档位名如内场1199元Web 端直接写价格数字如1039。price_index同价位的索引从 0 开始。同一场次可能有多个同价位座位区用这个字段指定选第几个。if_commit_order是否自动提交订单。新手建议先设false跑一次完整流程确认每一步都选对了再开 true否则可能误提交。下面这张图是我当时对照页面填配置时的真实截图字段和页面元素的对应关系一目了然再看一张完整的演出详情页你就明白这些参数从哪来了页面上标注了 target_url、city、date、price 对应位置的增强版示例配置前建议先看这张四个新手必踩的坑我全部踩过这一节写给我自己也写给马上要上手的你。全部是错误示例 → 正确做法的对比。坑一城市名跟页面差一个字❌ 页面显示深圳配置写深圳市✅ 严格照抄页面上的城市文本连空格都不要多脚本按文本精确匹配差一个字就找不到元素卡在选城市这一步眼睁睁看着票卖完。坑二日期格式写错端❌ 移动端写成2023-10-28Web 端写成10.28✅ 移动端MM.DD10.28Web 端YYYY-MM-DD2023-10-28坑三设备没连上就开跑❌ 模拟器没启动直接./start_appium.sh报Unable to find an active device or emulator✅ 先adb devices确认设备在线再启动 Appium坑四开了if_commit_order又没提前试跑❌ 配置完直接true上真场次✅ 先用一场已售罄/未开售的演出、false跑通全流程确认无误再开 true想让成功率再高一点三个进阶思路跑通基础流程后以下三点是我实测对结果影响最明显的点到为止你可以自己深挖。1. 多账号并行在users里配多个账号的观演人或在不同设备各跑一个实例。同一场次多个账号同时提交概率叠加。注意每个实例用独立的配置文件。2. 卡点启动脚本的轮询会一直等到开售瞬间。把server_url、设备、配置全部提前半小时就位开票前保持页面活跃别让会话过期。3. 性能调优damai_app_v2.py里内置了极短的显式等待和坐标点击damai/config.py还提供fast_mode、max_retries等开关。抢票场景下等待时间越短越有利但调太小也可能漏掉元素需要按设备性能微调。写在最后工具替你手速但请保持清醒这个项目对我最大的意义是把开票瞬间的焦虑替换成了提前配置时的从容。它同时覆盖 Web 和移动双端配置驱动、参数透明、重试机制内置作为一个学习 Selenium/Appium 自动化实战的案例也相当完整。想上手的话按这条路线走克隆项目跑./check_environment.sh补环境用一场非目标演出 if_commit_order: false完整试跑一次确认无误后替换成真正的演出配置开票前 30 分钟就位详细文档在项目内的README.md和QUICK_START.md源码按damai/与damai_appium/目录分得很清楚最后两句实在话请遵守平台使用条款建议用专门的账号操作别在短时间内高频重复请求。自动抢票工具优化的是执行效率不是合理性的豁免——把技术用在刀刃上享受演出的那一刻才是我们折腾这些代码的全部意义。祝你的下一次开票也能在 3 秒内出票。【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考