Automatic_ticket_purchase:毫秒级响应的自动抢票工具,从部署到第一次抢票
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
热门演出开售时,"立即购买"按钮常常瞬间变灰,手动抢票基本没有胜算。Automatic_ticket_purchase 是一款通过 API 直连大麦网接口的自动抢票工具,把整个购票流程的响应压缩到毫秒级,本文带你从零跑通它。
为什么手动抢票总是输
先看两个熟悉的场面:
- 开售前你守在页面里反复刷新,手指悬在鼠标上,按钮一变绿就点下去——结果跳转订单页时,目标票价已经变成"缺货登记"。
- 好不容易进到了提交订单那一步,等你输完验证码、确认完观演人,系统提示"库存不足,订单已关闭"。
问题不在手速。手动流程里每一步都要等浏览器渲染页面、等脚本执行、等人做判断;而 Automatic_ticket_purchase 干掉了其中绝大部分环节。两者放一起对比就很清楚:
| 对比项 | 手动抢票 | Automatic_ticket_purchase |
|---|---|---|
| 页面渲染 | 浏览器要完整加载页面、执行前端 JS | 不渲染页面,用 requests 直接请求数据接口 |
| 购买动作 | 肉眼找按钮、手点鼠标、人脑判断状态 | 脚本循环轮询按钮状态,一变"立即购买"立刻继续 |
| 登录状态 | 每次重新登录,还可能触发滑块验证 | 登录一次,cookies 存入 cookies.pkl,下次直接复用 |
| 速度瓶颈 | 人的反应时间 + 页面加载时间 | 只剩网络往返时间 |
最后一行是关键:去掉"等人"和"等页面"之后,抢票的耗时就只剩下一次 HTTP 请求的网络延迟,这也是毫秒级响应说法的来源。
它是怎么做到毫秒级的
打个比方:你在餐厅吃饭,普通流程是"服务员记单 → 传菜单 → 后厨下单",每一步都要交接;而这个工具相当于你记住整套下单动作,直接走到后厨口报菜名。页面只是入口,真正的下单发生在接口层。
代码里的分工也很清晰,可以拆成四层看:
登录层(唯一用到浏览器的地方):tools.py 里的account_login()用 selenium 打开真实 Chrome 完成登录,并且特意关掉了自动化特征,避免被识别出是脚本。登录成功后,cookie 被打包存进cookies.pkl。README 里说得很直白:只有登录用到页面,其余操作全部走 requests 请求。
参数准备层:get_api_param()会把大麦网的前端 JS 文件拉下来,用正则从里面抠出调接口所需的commodity_param和ex_params——也就是说,接口参数不是凭空猜的,而是从官方页面代码里"逆向"出来的。
轮询层:Automatic_ticket_purchase.py 的run()里是一个while True循环,每轮调用step1_get_order_info()查询目标价位的按钮状态:"即将开抢"就继续等,"缺货登记"就立刻认输退出,"立即购买"则马上进入下一步。
下单层:step2_click_buy_now()请求订单确认页拿到提交订单所需的全部参数,step3_submit_order()校验观演人、勾选你指定的购票人,调用createOrder接口提交订单。成功后终端会打印alipayOrderId和支付宝支付链接——注意支付这一步仍然需要你自己完成。
四步里没有任何一步需要打开页面,这就是它比传统"模拟点击"脚本快的原因。
🎯 从克隆仓库到第一次抢票
先交代一句重要的事:README.md 开头写明项目已停止维护,且"大部分购买方式已迁移至手机端,需配合抓包处理"。所以把它当作一个学习接口逆向和自动化流程的样例来跑,比当作现成工具来依赖更合适。
环境搭建:装依赖和 ChromeDriver
git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase cd Automatic_ticket_purchase pip install -r requirements.txtrequirements.txt 里只有 selenium、requests、beautifulsoup4、pyexecjs 四个包。接下来是新手最常卡住的一步:准备 ChromeDriver。下载一个与你系统、浏览器版本匹配的 ChromeDriver,放到项目根目录,并按操作系统重命名——Windows 叫chromedriver_windows,Linux 叫chromedriver_linux,Mac 叫chromedriver_mac。代码里account_login()是写死按这三个文件名找的,名字不对浏览器就起不来。
配置关键参数:商品ID和购票人信息去哪找
打开 Automatic_ticket_purchase.py,在DaMaiTicket.__init__里改这几个参数:
self.login_id: str = 'account' # 大麦网登录账户名 self.login_password: str = 'password' # 大麦网登录密码 self.item_id: int = 610820299671 # 商品id self.viewer: list = ['viewer1'] # 在大麦网已填写的观影人 self.buy_nums: int = 1 # 购买数量,需与观影人数量一致 self.ticket_price: int = 180 # 购买指定票价两个参数最容易填错,位置如下:
item_id:打开你想抢的场次详情页,地址栏里id=后面那串数字就是。README 特别提醒:item_id 根据地区来确定,同一个巡演每个城市对应不同的 item_id,选哪个站就填哪个站的。
viewer:必须和你大麦账号"常用购票人管理"里已添加的姓名完全一致,脚本提交订单前会逐一比对,对不上会直接终止。登录大麦后在"我的大麦 → 常用购票人管理"里核对姓名。
另外两个隐性约束:buy_nums必须等于 viewer 列表里的人数,否则run()开头就会报"购买数量与实际观演人数量不符";ticket_price要写成页面上真实存在的票价数字,脚本靠它去 skuList 里匹配 sku_id,价格填错就找不到货。
运行与验证:首次登录并保存 cookies
python Automatic_ticket_purchase.py # 账号密码登录(默认) python Automatic_ticket_purchase.py --mode qr # 扫码登录第一次运行时项目目录里还没有cookies.pkl,脚本会按--mode指定或默认方式打开浏览器让你登录。check_login_status()会访问"我的大麦-个人信息"页面,标题对上才算登录成功,随后把 cookies 存盘。第二次运行起就直接读 cookies.pkl,不再碰浏览器。
验证是否跑通,看终端输出就够了:成功时会打印"抢票成功"、alipayOrderId和支付宝支付链接,再去大麦的"我的大麦 → 交易中心 → 订单管理"里确认订单、手动付款。如果提示"登录失败",按提示删掉cookies.pkl重新登录即可——这个文件会过期。
⚠️ 还能玩出什么花样
选座购买,一个现成的签名接口案例。V2.1 已经支持指定价位下的选座购买(暂不支持连坐)。它的核心在 signcode.js:get_seat_dynamic_info()等函数用 execjs 在本地执行这段 JS,把h5token + 时间戳 + 参数算成 sign 签名,再请求 mtop 接口拿座位数据。想看"带签名的接口怎么调",把这条链路读完收益很大。
往手机端迁移,抓包适配。README 说大部分购买方式已迁到手机端,如果你要延续这个思路,路线其实是现成的:抓一下手机客户端的真实流量,照着step1 → step2 → step3的请求模式重写,再把get_api_param()里那段 JS 解析换成当前线上版本。
新手踩坑集中在三处:
- 浏览器起不来:九成是 ChromeDriver 版本不匹配,或者没按
chromedriver_windows这种命名放到根目录。对照浏览器版本重新下载,改名,放在项目根目录。 - "请检查输入的观演人信息与大麦网观演人信息是否一致":viewer 里的名字和账号里添加的购票人对不上,注意空格和繁简差异,去常用购票人管理页逐字核对。
- 登录总是失败:cookies 过期或者登录态失效。删掉
cookies.pkl重新走一次登录;如果重登后仍反复失败,要考虑接口本身已经变更的可能——项目已停止维护,PC 端接口存在老化风险,遇到这种情况不要硬调,先确认目标接口是否还走 PC 端。
这个项目真正的价值不在于"抢到了票",而在于它把一套接口逆向的完整样板摆在明面上:怎么绕过自动化检测登录、怎么从前端 JS 里抠参数、怎么用本地 JS 计算签名。项目虽然不再更新,方法并没有过时。有兴趣的话可以克隆仓库把代码读一遍,再照这个骨架给自己常用的票务场景写一个适配版。
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考