ARTICLE DETAIL

资讯详情

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

大麦抢票脚本完整指南:如何用 3 个接口请求完成抢票

大麦抢票脚本完整指南:如何用 3 个接口请求完成抢票 大麦抢票脚本完整指南如何用 3 个接口请求完成抢票【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchaseAutomatic_ticket_purchase 是一个大麦网抢票脚本登录后通过 HTTP 请求完成整个购票流程不再逐页点击。核心数据点从查询票档到提交订单只经过 3 次接口调用全程不渲染页面、不点按钮。它解决什么问题手动点击是抢票的瓶颈手动抢票输在页面加载时间上。开售瞬间人要先刷新页面、找到票价档位、点“立即购买”、填观演人、再点确认任何一步页面没加载出来票就没了。以仓库截图里的周杰伦太原站演唱会为例页面列出 2000 元起的多个票价档位从点到“立即购买”到订单确认至少跨 2 次页面跳转。这个项目早期版本V1也用按钮点击作者自己承认“还要等待页面元素加载效率低下”。V2 的重构思路是只在登录时打开一次浏览器页面之后所有动作都改为接口请求。区别类似“亲自跑柜台取餐”和“直接打餐厅点单接口”人手的变量是页面速度接口请求的变量只剩网络延迟。三步跑起来安装、配置、启动跑通的最短路径就三步装依赖、配驱动和参数、运行登录不需要额外构建步骤。第一步克隆并安装依赖。依赖只有 4 个requests、selenium、beautifulsoup4、execjs。git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase cd Automatic_ticket_purchase pip install -r requirements.txt注意 requirements.txt 把 selenium 钉死在 3.141.0 这个老版本需要搭配较老的 Chrome 浏览器新浏览器大概率不兼容。第二步配置 ChromeDriver 与 4 个抢票参数。下载与本机 Chrome 版本匹配的 ChromeDriver按系统重命名为 chromedriver_windows、chromedriver_linux 或 chromedriver_mac放到项目根目录tools.py 的 account_login 按系统分支读取驱动路径。然后在 Automatic_ticket_purchase.py 里填 4 个必填参数self.item_id: int 610820299671 # 商品id来自演出页地址栏 self.viewer: list [viewer1] # 大麦已登记的常用购票人 self.buy_nums: int 1 # 数量必须与观演人数量一致 self.ticket_price: int 180 # 目标票价档位item_id 是打开演出详情页后地址栏里 id 后的那串数字每个城市站对应不同值第三步首次运行。python Automatic_ticket_purchase.py # 默认账号密码登录 python Automatic_ticket_purchase.py --mode qr # 或扫码登录首次会弹出 Chrome 窗口完成登录登录态保存到 cookies.pkl之后运行就不再打开浏览器。登录态是整条流水线的入口拿到它之后脚本进入真正的抢票决策环节。它是怎么工作的凭证缓存、状态轮询、接口签名三层整个抢票流程可以拆成三层凭证获取、抢票决策、订单提交每层都对应一个可独立替换的模块。第一层凭证获取与缓存。Selenium 只出现在登录这一步。登录成功后抓取 cookies 存入 cookies.pkl后续 check_login_status 通过请求个人信息页、比对页面标题是否为“我的大麦-个人信息”来验证凭证是否仍然有效。类比酒店入住拿到房卡后不用每次走前台卡失效了再重新办一次入住。第二层抢票状态机。DaMaiTicket.run 的核心是一个 while 轮询循环不断查询目标价位的按钮状态分支只有 4 种if ticket_sku_status 即将开抢: continue # 未开售继续轮询 elif ticket_sku_status 缺货登记: return False # 已售空终止 elif ticket_sku_status 立即购买: submit_order_info self.step2_click_buy_now(ex_params, buy_serial_number) break # 开售进入下单像门铃一样一直问“开售了吗”回答“即将开抢”就继续按回答“缺货登记”就挂电话回答“立即购买”立刻冲进去。提交订单前step3_submit_order 还会把填的观演人姓名和大麦后台的常用购票人做交叉校验对不上直接报错退出第三层接口参数生成与签名。前两层依赖的请求参数并不是写死的。tools.py 的 get_api_param 会实时拉取演出页的 JS 文件用正则解析出两组下单必备参数相当于“从餐厅内部系统里学会点暗号”页面升级后暗号变了也能重新学。选座接口还多一道门槛请求必须携带 sign 签名。signcode.js 是一个自包含的 MD5 变体算法通过 execjs 引擎按时间戳每次现算一份签名相当于“口令会随时变化的通行证”。三层里任何一层断掉脚本都会在明确的分支处停下并打印原因这比黑盒工具更便于排查问题。实测数据与适用边界没有基准测试状态分支表更诚实本项目没有公开的基准测试或成功率数据适用性要靠下面的状态分支表加 4 条已知局限来判断。票档状态脚本行为说明即将开抢继续轮询等待开售循环不退出立即购买进入下单流程核心抢票路径选座购买拉取座位列表自动选座V2.1 新增不支持连坐缺货登记直接终止该价位已售空局限需要如实说明README 明确写着“已停止维护暂无更新计划”且大部分购买方式已迁移至手机端PC 端接口可能已失效选座仅支持单一价位、不支持连坐buy_nums 必须与观演人数一致selenium 3.141.0 年代久远新版 Chrome 与 Selenium 4 生态下元素定位 API 会直接报错get_api_param 里写死了 vue-pc/0.0.70 的 JS 地址站点 JS 一升级正则解析就会失败。还需要注意源码的轮询循环没有 sleep提前运行过久等于高频打接口有触发风控的可能账号登录遇到滑块需要人工介入。边界说完这个项目仍然有明确的高价值用途下面按场景拆解。落地场景与进阶调优3 个高频用例项目的价值集中在 3 个场景前两个是功能场景第三个是学习场景。不选座抢票演唱会。填好 item_id 和票价档位开售时脚本自动完成查询、下单、提交人不用守在页面前。选座抢票话剧、体育。通过带签名的 mtop 接口拉座位列表按“楼层-排-列”顺序自动挑前 buy_nums 个可售座位适合不在意具体座位只求有票的场景。接口自动化学习样例。登录、JS 参数解析、签名生成、订单提交是一条完整链路适合学习如何把一个网页流程改造成接口流程。常见坑可以对照 3 项检查检查项期望状态异常时处理cookies.pkl文件存在且登录态有效删除后重新运行触发重新登录chromedriver版本与 Chrome 一致浏览器白屏或崩溃重下驱动并重命名启动时机开售前 1~2 分钟过早启动等于高频轮询风控风险上升另有两条建议开抢前先在页面核对 item_id 与观演人姓名参数错配会直接报错退出建议用 --mode qr 扫码登录避免把账号密码明文留在代码里。若确实需要提前预热建议在轮询循环里自行补一个 sleep把请求频率降下来。选型建议与展望一句话结论想学接口自动化、或以学习为目的验证 PC 端抢票链路的开发者值得读需要持续维护、手机端购票或商业用途的团队不建议使用。这个项目的价值在于“代码极少、链路极全”700 多行 Python 加一个 JS 签名文件完整演示了“登录→选价位→填观演人→下单”这个网页全流程如何收敛成 3 次接口调用。其中 get_api_param 的 JS 动态参数解析和 signcode.js 的签名生成是两个可以平移到其他同类站点上的动手点也是普通爬虫教程里很少覆盖的部分。使用前请确认目标演出仍支持 PC 端购票遵守平台条款仓库定位是个人学习参考把它当作一份可读的接口自动化教材比当作生产工具更合适。【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表