news 2026/10/21 21:24:36

如何搭建大麦网自动抢票系统:从API逆向到下单的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何搭建大麦网自动抢票系统:从API逆向到下单的完整指南

如何搭建大麦网自动抢票系统:从API逆向到下单的完整指南

【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase

热门演出开票时,票源在几秒内就被秒空,人工点击永远拼不过服务器。开源项目 Automatic_ticket_purchase(大麦抢票脚本)给大麦网抢票自动化系统换了一条路:对大麦 PC 端购票流程做 API 逆向,把逐页点击全部换成对官方接口的直接请求,浏览器只在登录时使用一次。本文先讲清它的原理,再带你跑通全流程,最后说明坑在哪里、边界在哪里。

⏱️ 它解决什么问题:人手拼不过接口

手动抢票要经历“打开页面→选价位→选观演人→点购买”一整条链路,每一步都受页面渲染和你的反应速度拖累。高并发场景下,单人的瓶颈就是这条操作路径太长。这个项目的思路很直接:浏览器只用一次换取登录态,之后所有动作都走 HTTP 请求完成——取商品、点“立即购买”、提交订单。

效果上最直观的变化是量级:页面操作按秒计,直接打接口按百毫秒计,开票前的时间全部留给“等按钮变可点”。

🔍 核心原理:从开票到下单的三步接口链

开票时机就藏在按钮文案里

抢票主脚本 把购买流程切成三段:step1_get_order_info()请求detail.damai.cn/subpage接口拿到商品与 SKU 信息;step2_click_buy_now()模拟点击“立即购买”,进入buy.damai.cn/orderConfirm拿订单确认参数;step3_submit_order()向createOrder接口 POST 完成下单。

抢票的关键是精确卡住开票时机。脚本用一个死循环轮询接口返回的btnText字段,靠按钮文案判断票档状态:

if ticket_sku_status == '即将开抢': continue elif ticket_sku_status == '立即购买': buy_serial_number = '{}_{}_{}'.format(self.item_id, self.buy_nums, sku_id)

一共四种分支:“即将开抢”继续等,“立即购买”开卖了立即冲,“缺货登记”说明已售空、直接退出,“选座购买”则转入选座分支。

签名与参数提取:两个最脆弱的位置

部分 mtop 接口要求 sign 签名(一种由 token 和时间戳算出的校验串)。工具函数 里的get_sign_code()从 cookie 取出h5_token,拼上毫秒时间戳,再通过 pyexecjs 调用签名脚本 的calcaulate函数算出来。参数提取更“激进”:get_api_param()直接下载大麦的前端 JS 包,用正则把commodity_param、exParams这些请求参数抠出来,避免写死在代码里。

观演人的处理也有讲究:step3_submit_order()不会手动选人,而是从订单确认页取出dmViewerList名单,把预先写进self.viewer列表的名字逐一标记为isUsed——相当于提前登记好购票人,脚本自动帮你勾选。

图:“我的大麦”里的常用购票人管理页,这里登记的姓名必须与脚本 viewer 列表完全一致,否则提交订单会被拦下。

🚀 实操指南:环境准备、参数填写到首次运行

商品ID去地址栏就能拿到

全项目最核心的参数是item_id——每场演出在每个城市的唯一标识。取法只有一处:用浏览器打开目标演出详情页,看地址栏里id=后面的数字。注意同一演出不同城市的站次是不同取值,别拷错。

图:商品详情页 URL 中红框处即 item_id,填进脚本后它决定了抢哪一场、哪个城市的票。

配好驱动、填 4 个参数、2 条命令跑起来

先克隆仓库git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase,再装依赖pip install -r requirements.txt。两个容易漏的点:pyexecjs 需要本机装好 Node.js 运行时;登录环节用 Selenium,要下载与系统匹配的 ChromeDriver,重命名为chromedriver_windows、chromedriver_mac或chromedriver_linux放进项目根目录。

然后改 核心脚本 中DaMaiTicket.__init__()的四个参数:

self.item_id: int = 610820299671 # 商品id self.viewer: list = ['viewer1'] # 已登记的观演人 self.buy_nums: int = 1 # 购票数量 self.ticket_price: int = 180 # 目标票价

最后两条命令任选其一:

python Automatic_ticket_purchase.py # 账号密码登录 python Automatic_ticket_purchase.py --mode qr # 扫码登录

首次没有 cookie 时默认走账号登录;选--mode qr则弹出浏览器扫二维码。

🩹 踩坑与对策:登录失效和站点改版怎么办

登录态过期

登录成功后脚本会把凭证存进cookies.pkl,下次运行直接load_cookies()加载,跳过浏览器。cookie 过期时check_login_status()会返回 False——它的判断逻辑是请求个人中心页面,看标题是否为“我的大麦-个人信息”。此时删掉 cookie 文件重跑即可。另外account_login()特意用excludeSwitches等参数隐藏了 Selenium 的自动化指纹,删掉这些配置会触发滑块验证进不去。

站点一改 JS 就要重新逆向

get_api_param()的注释自己就打了预防针:大麦前端 JS 更新后,里面的正则可能失配,需要跟着改。更根本的是 README 已注明项目停止维护,大部分购买方式迁移到了手机端,要继续用得靠抓包工具重新逆向。这就是 API 逆向的真实成本:结论永远有时效,站点一变更就得重做。

🚧 边界在哪里

  • 仅覆盖 PC 端流程:整条链路基于 PC 接口,对只在移动端存在的购买流程无效。
  • 选座能力有限:只支持单一指定价位下挑座,不支持连坐,pick_seat()的策略就是按顺序拿前 N 个可售座位。
  • 单目标、单进程:一个item_id配一个票价,没有多目标并发能力;所谓高并发优势是相对人工而言,不是能组分布式集群。
  • 官方状态:项目已停止维护,README 免责声明明确仅供个人学习参考。

⚖️ 合规提示

  • 遵循大麦网服务条款,不绕过其安全机制;
  • 控制轮询频率,保持合理请求间隔,别用高并发压垮服务器;
  • 账号与 cookie 凭证属敏感信息,cookies.pkl不要上传到公开仓库;
  • 以学习和研究接口原理为目的,不用于倒卖牟利。

【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 4:42:20

【JavaEE】HTTPS(面)

前面讲过运营商劫持 为了防止这一情况,现在用https进行加密 明文,就是要传说的原始数据 密文就是把明文进行一系列变化之后,得到一个看不懂的内容 加密就是明文到密文的过程 解密就是明文,密文到明文的过程 加密和解密的过程中&am…

作者头像 李华
网站建设 2026/10/21 0:36:08

大学生沉浸式讲解Python详细安装教程

1.1按电源键,打开电脑1.2点击浏览器,并输入www.python.org,进入python官网1.3点击官网中的Download,在左边边框选择适合自己的电脑系统1.4选择你自己需要安装python的版本1.5下载完成之后,在自己文件夹当中找到刚刚安装…

作者头像 李华
网站建设 2026/10/19 13:58:16

面试题 - 让你设计一个电路图,你是如何选择芯片的,要考虑那些

作为一名资深硬件工程师,在设计电路图并选择芯片时,需要考虑多个方面以确保所设计的系统性能可靠、成本合理且符合项目需求。以下是一些关键考量因素 1. 明确需求 功能要求:了解系统需要完成的功能,例如电源管理、信号处理、数据通信等。 性能指标:确定系统的性能指标,如…

作者头像 李华
网站建设 2026/10/21 4:48:07

安全饮水“六不喝”

人机协作,仅供参考。前言:今天看到一条新闻,中国籍研究生在美国向同事投毒被逮捕,又想起了很多年前的清华投毒案,心里十分难过和担忧,于是写下这篇文章,希望大家平安,社会安宁。水中…

作者头像 李华
网站建设 2026/10/21 16:37:26

最小覆盖子串解题笔记:滑动窗口与缺口计数器的实现推导

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华