ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python 自动抢票完整指南:大麦双端购票脚本的上手实践

Python 自动抢票完整指南:大麦双端购票脚本的上手实践 Python 自动抢票完整指南大麦双端购票脚本的上手实践【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase抢票倒计时归零的那一刻手动点击往往慢一步。本文以开源项目ticket-purchase大麦自动抢票工具为例带你用 Python 走通从登录、选票到提交订单的自动抢票闭环并讲清楚它的配置、故障定位和边界。开售前的最后 10 秒脚本在干什么先回答一个常见疑问为什么我的脚本比手动快了几秒还是没买到原因通常是两点开售前页面还没进入「待开售」状态脚本空转或者时间没对齐点击发生在开售时间之前。这个项目的做法是让浏览器/APP 停留在目标详情页持续轮询检测按钮文本从「提交缺货登记」变成「立即预订」的瞬间才点击移动端则监听列表页刷新。理解了这一点后面的配置和排错就都顺了。 三步跑通移动端抢票的最小步骤移动端是项目主推的路径因为大麦的大部分票只能在 APP 端购买。最小流程如下克隆并安装依赖git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase然后pip install -r requirements.txt或poetry install。环境自检与启动 Appium依次执行./check_environment.sh和./start_appium.sh。后者会自动带上ANDROID_HOME环境变量并监听 4723 端口。设备上先手动打开大麦 APP、登录账号、搜到目标演出停留在列表页然后运行./start_ticket_grabbing.sh。跑之前只需改一个文件damai_appium/config.jsonc。它的实际内容长这样{ server_url: http://127.0.0.1:4723, keyword: 周深, users: [王胜, 潘鸿运], city: 深圳, date: 12.06, price: 内场1199元, price_index: 5, if_commit_order: true }Web 端更简单编辑damai/config.json后执行python damai/damai.py入口逻辑在 damai.py。架构拆解谁发指令谁执行出错找谁Web 端只有两层concert.py 里的Concert类直接驱动 ChromeDriver 操作浏览器config.py 里的Config类负责把 JSON 文件读成参数对象。移动端多了一个中间人链路变成「发指令 → 转译 → 执行」三段你的 Python 脚本damai_app_v2.py发指令Appium Server 负责转译把指令翻译成 Android 能懂的操作UiAutomator2 驱动在真机/模拟器上执行点击、查找。出错时按链路倒查指令发不出去先curl http://127.0.0.1:4723/status确认 Server 活着Server 正常但设备没反应再查驱动和adb devices的设备列表。各模块分工一览路径职责damai/config.pyWeb 端Config类统一管理配置参数damai/concert.pyConcert类登录验证Cookie 读写、票务选择、订单提交damai/damai.pyWeb 端入口校验配置后驱动抢票流程damai/check_environment.py自动查找/校验 ChromeDriver 与浏览器版本damai_appium/config.py移动端Config类读取config.jsoncdamai_appium/damai_app_v2.py移动端入口优化后的抢票主程序start_appium.sh、start_ticket_grabbing.sh一键启动 Appium / 一键执行抢票登录环节值得单独说一句Concert首次运行会弹出浏览器让你扫码并把 Cookie 存到damai_cookies.pkl之后每次启动直接复用不再扫码。关键配置一张表说清要填什么Web 端配置damai/config.json参数作用示例值target_url目标演出详情页地址脚本直接打开它https://detail.damai.cn/item.htm?idxxxusers观演人姓名列表人数即购票数量[张三, 李四]city/dates/prices多维筛选城市、场次、票面价格均为列表广州/[2023-10-28]if_listen开关缺货时是否点击「缺货登记」trueif_commit_order开关是否自动提交订单truemax_retries开售前最大重试轮询次数1000移动端配置damai_appium/config.jsonc字段更精简server_urlAppium 地址、keyword搜索关键词、users、city、date、price、price_index、if_commit_order。其中price_index最容易填错。原因是 APP 端票价文本在某些版本里是空串脚本没法按文字找价格按钮只能按位置索引定位从 0 开始价格从低到高排序。填之前先手动进详情页数一下目标票价排第几。⚠️ 避坑指南从报错信息反查原因跑完提示要重新登录或过几天又要求扫码原因Cookie 过期。解法删掉运行目录下的damai_cookies.pkl重新运行脚本触发扫码流程刷新凭证。脚本启动即退出提示「环境检查失败」原因ChromeDriver 与 Chrome 浏览器版本不匹配。解法Concert初始化时会调用 check_environment.py 自动校验按它的提示装对应版本即可Windows 下另有 tests/unit/test_check_environment_windows.py 覆盖的跨平台检测路径。报Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported原因Android SDK 环境变量没设置。解法export ANDROID_HOME/path/to/android/sdk并写入~/.bashrcmacOS 用~/.zshrc或直接用start_appium.sh它会代劳这一步。报Unable to find an active device or emulator原因设备未连上或 USB 调试未开。解法adb devices应看到设备号手机需开启 USB 调试并授权。报Connection refused原因Appium Server 没起或 4723 端口被占用。解法appium --port 4723手动起服务再用curl http://127.0.0.1:4723/status验证连通。三条隐性调优建议抢票前关掉占网络的后台应用降低延迟提前运行脚本进入轮询等待并与开售时间对齐选座类演出脚本只负责把页面带到选座环节座位本身仍要你在页面上快速点选这一点写进了Concert的choice_seat逻辑。 适用边界先弄清它不能做什么这套自动抢票工具不适用的场景先列清楚选座类演出脚本不替你选座只等手动操作其他票务平台元素定位全部基于大麦的页面结构换站即失效大麦 UI 大改版后XPath 与 class 名硬编码在源码里需手动更新商业批量抢票项目许可证明确仅供学习研究。想往前走一步有两个性价比最高的方向一是多账号并行用多台模拟器各自跑独立 Appium 端口、独立配置各自独立server_url互不干扰二是把fast_mode、max_retries和等待时长当成调优旋钮针对你所在网络实测开售瞬间的按钮出现节奏把点击时机压到最短。行动建议今天就做三件事先跑./check_environment.sh确认环境绿灯再用一个测试账号把移动端三步流程完整走一遍if_commit_order先设false只观察不真实提交最后按上面的表格把target_url和price_index核对一遍正式开售前 10 分钟启动脚本即可。【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表