大麦自动抢票脚本实测记录:完整跑通全流程 + 签名校验逆向拆解
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
Automatic_ticket_purchase 是一个 Python 实现的大麦自动抢票脚本。它的核心机制很简单:只让真实浏览器负责登录,余票状态查询、下单、观演人提交,全部走 HTTP 直连大麦接口完成。我完整跑了一遍流程,这里记录配置、运行和容易出问题的细节。
先说结论
跑通了。装环境、登录、配参数、跑起来,全程大约半小时。代码不长,核心逻辑集中在两个文件里,适合想看清接口逆向怎么做的开发者。如果你期待拿到就能抢到任意场次,要先想清楚,项目已经停止维护。
操作实录:从环境配置到自动抢票跑通
环境准备
核心依赖就四个,都在 requirements.txt 里:
requests:发 HTTP 请求,负责所有接口直连selenium:驱动浏览器,只在登录环节使用beautifulsoup4:解析 HTML,用来校验登录状态pyexecjs:在 Python 里执行 JS 签名代码
另外要准备一个与本机 Chrome 匹配的 ChromeDriver。下载后改名为chromedriver_linux、chromedriver_windows或chromedriver_mac,放到项目根目录。登录模块 会自动识别当前平台,按名字加载对应驱动。
登录与凭证复用
脚本只在第一次运行时弹浏览器。登录成功后,cookies 写入本地cookies.pkl。之后每次运行检测到文件存在,直接复用登录态,不再开浏览器。
登录方式有两种:默认账号密码,把凭证填进代码;加参数--mode qr改成扫码登录,终端弹出二维码,手机扫一下即可。推荐扫码,密码不用写进代码里。
关键参数配置
打开 主脚本,找到__init__方法,一共六项:
self.login_id: str = '你的账号' # 大麦网登录账户名 self.login_password: str = '你的密码' # 大麦网登录密码 self.item_id: int = 610820299671 # 商品id self.viewer: list = ['张三'] # 大麦已登记的观演人 self.buy_nums: int = 1 # 购票数量 self.ticket_price: int = 180 # 目标票价档位item_id是商品 ID。用浏览器打开目标演出页面,URL 里id=后面的那串数字就是它。不同城市、不同场次对应不同 ID。
viewer是观演人姓名,必须和"我的大麦 → 常用购票人管理"里的记录一字不差,多一个空格都会在提交订单时被拦下。buy_nums是购票数量,必须和观演人数量相等。ticket_price是目标票价档位,填错价格脚本就定位不到对应的 SKU。
运行与状态变化
运行命令:
python Automatic_ticket_purchase.py # 账号密码登录 python Automatic_ticket_purchase.py --mode qr # 扫码登录脚本进入循环,持续查询目标票价的状态,按状态分支:
- "即将开抢":继续循环,保持高频轮询
- "缺货登记":该价位已售空,脚本直接退出并提示
- "立即购买":立刻发起下单,一秒不耽
- "选座购买":走选座分支,先拉座位图数据,再按票价档过滤出可售座位
下单成功后,终端会输出支付宝订单号与支付链接,去订单中心完成支付即可。
它凭什么做到:比手动快在自动抢票的每一环
浏览器只干登录,其余全部走接口
常见的抢票脚本模拟人点按钮,每一步都要等页面加载。这个项目让浏览器只干一件事:登录。之后requests直连大麦接口,不渲染页面,不等按钮状态,延迟从秒级降到毫秒级。
tools.py 里还有个细节:请求要带的参数不是写死的,而是去拉大麦网的前端 JS 文件,用正则把参数结构抠出来。官方 JS 更新后,只需要改这一处代码。
签名校验:每个请求都要带的"暗号"
大麦的接口有一层签名校验,参数必须按特定算法加密,缺了它服务器直接拒绝。这套算法完整实现在 signcode.js 里,Python 通过 pyexecjs 读取该文件,为每次请求生成 sign 字段。
签名输入里有时间戳,电脑时间一漂移,签名就对不上。抢票前记得校准系统时间。
四种状态驱动下单
抢票的关键不是"发请求越快越好",而是"该动的时候才动"。脚本持续读取目标票价的状态,变成"立即购买"才发起下单。状态没到就提前发请求,会被风控拦下。
取订单信息、点立即购买、提交观演人锁单,每一环都有失败回退。README 里附了一张完整流程图,可以对照着看。
不注意这些细节就会出问题
- 观演人姓名不精确:多一个空格、少一个字,提交订单都会失败。从"常用购票人管理"页面复制,不要手打。
- 数量与姓名不匹配:
buy_nums和viewer数量不一致时,脚本会直接拒绝运行。跑之前先核对。 - 系统时间不准:签名依赖时间戳,差几秒服务器就可能拒签。抢票前与网络时间同步。
- ChromeDriver 与 Chrome 版本不对应:登录环节直接报错。下载驱动前先确认本机 Chrome 的版本。
cookies.pkl过期:失效后脚本仍会复用旧登录态,且没有明显提示。登录失败时删除文件重新登录。- item_id 填错:会抢错场次。切换场次后务必重新核对地址栏里的
id=,不同城市 ID 不同。
想玩得更深
- 多账号并行:脚本按单账号优化,跑多个实例、各自配置不同账号,是最简单的扩展方式。
- 连坐选择:
pick_seat函数目前按顺序取座位,不考虑相邻,有兴趣可以改成按相邻座位聚类后再挑。 - 抢票通知:下单成功后目前只打印支付链接,在这里接上邮件或微信推送,做到抢到即提醒。
- 异步提速:把
requests换成aiohttp,轮询和下单改成异步协程,整体速度还能再上一个台阶。
获取与使用提醒
git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase cd Automatic_ticket_purchase pip install -r requirements.txt项目是 MIT 协议。它的价值主要在技术学习:接口逆向、签名算法复现、状态机设计,三种实战都在这里。不适合高频刷接口,也不适合商业倒票。另外大部分购买方式已迁移至手机端,实际使用可能需要配合抓包调整逻辑。它最适合想练手网络编程的 Python 开发者。
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考