大麦抢票脚本实战指南:三步跑通 Python 自动下单全流程
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
手动抢票要刷页面、找按钮、填观演人,慢一步就没了。大麦抢票脚本(Automatic_ticket_purchase)只在登录环节开浏览器,其余取 SKU、建订单、提交订单全部走 HTTP 请求,把整条下单链路自动化。
抢票链路的定位:为什么只有登录需要真浏览器
这个仓库的 V1 版本靠 Selenium 点点点买票,要等页面元素加载完才能走下一步,效率很低。V2 版本把思路换了:Selenium 只负责登录拿 Cookie,之后所有请求换成requests直发接口——浏览器只是登录的"入口关卡",进门之后方向盘就交给接口了。
它做的事与不做的事,先对齐预期:
- 能买"立即购买"型普通场次,能买选座场次(指定价位、暂不支持连坐)
- 登录后 Cookie 落盘复用,下次运行免登录
- 不覆盖移动端流程;README 顶部已注明项目停止维护,大部分购买方式已迁移至手机端,PC 端接口后续需自行抓包跟进
一句话:它是一份"接口式下单"的完整样板,学习价值大于生产价值。
环境准备:三步让脚本第一次跑起来
环境要求很轻,Python + 4 个依赖,外加两样系统级组件:
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase- 安装依赖(requirements.txt 里就 4 行):
pip install -r requirements.txt依赖是requests、selenium、beautifulsoup4、pyexecjs。注意pyexecjs需要本机装好Node.js 运行时,选座流程要靠它执行 signcode.js 计算 mtop 接口的 sign 签名。
- 下载与本地 Chrome 版本匹配的 ChromeDriver,放到项目根目录并按平台重命名:
chromedriver_windows/chromedriver_linux/chromedriver_mac。tools.py 里的account_login()就是按这三个文件名找驱动的,命名错一个字母都会启动失败。
DaMaiTicket 的 6 个参数与下单三步曲
所有抢票参数集中在 Automatic_ticket_purchase.py 的DaMaiTicket.__init__里,改完这 6 行就可以跑:
| 参数 | 含义 | 取值方式与注意 |
|---|---|---|
| login_id / login_password | 账号密码登录凭据 | 仅首次登录用;也可改扫码登录 |
| item_id | 商品 ID | 取商品页 URL 里的id参数 |
| viewer | 观演人姓名列表 | 必须与"我的大麦"里已填的购票人完全一致 |
| buy_nums | 购票数量 | 必须等于len(viewer),run()会先校验 |
| ticket_price | 指定票价 | 脚本按它匹配skuList里的档位 |
item_id 的位置——商品页地址栏id=后面那串数字,不同城市场次各不相同:
viewer 则填"我的大麦 → 常用购票人管理"里已经登记好的姓名,一字不差:
登录和配置完成后,执行入口是:
python Automatic_ticket_purchase.py # 默认账号密码登录 python Automatic_ticket_purchase.py --mode qr # 改为扫码登录主流程run()分三步:step1_get_order_info拉取 SKU 信息(响应是null(...)包裹的 JSONP 文本,脚本里做了剥离);step2_click_buy_now请求 orderConfirm 拿到window.__INIT_DATA__订单数据;step3_submit_order在观演人列表里按viewer标记isUsed并 POST 到createOrder提交。成功后打印支付宝支付链接。
三个真实用法:抢票前夜你会怎么写代码
卡开抢瞬间:常驻轮询模式
普通场次的按钮在开抢前是"即将开抢"。run()里是个while True循环,不断调 step1 轮询按钮状态:即将开抢就continue,缺货登记直接退出,立即购买立刻进入 step2。所以正确姿势是开抢前几分钟把脚本挂着,让它替你盯着状态翻转,而不是开抢时手动执行。
指定价位买座:选座购买(V2.1 新增)
选座场次走另一条支路,链路上多四个 mtop 接口:get_select_seat_params取场次 ID →get_seat_dynamic_info取看台 ID →get_select_seat_api拿座位 JSON 地址 →get_valuable_seat_id过滤不可售座位。每一步的sign参数都由 Node.js 执行 signcode.js 的calcaulate函数算出,h5token取自登录 Cookie 里的_m_h5_tk。
拿到全部座位后,format_valuable_seatid按ticket_price对应的 priceId 过滤、剔除非售座位,pick_seat按遍历顺序取前buy_nums个座位提交。注意这是"顺序取第一个"的朴素策略,不保证连坐,README 已明确此限制。
免二次登录:cookies.pkl 复用
第一次登录成功后,tools.save_cookies()会把 Cookie 以 pickle 存成cookies.pkl;之后每次run()先尝试load_cookies(),命中就跳过整个浏览器登录环节,省掉最慢的一步。登录态失效(页面弹回登录页)时,删掉cookies.pkl重新登录即可恢复。
排障清单:没抢到票时按图索骥
- 打印"登录失败, 请检查登录账号信息":
check_login_status是靠"我的大麦-个人信息"页面标题判定登录态的。若你用的是旧cookies.pkl,删文件重新登录;若是账号密码,核对登录框是否真的进了alibaba-login-box这个 iframe。 - 登录页弹滑块、"登录异常,请检查页面登录提示信息":风控识别出了 Selenium。代码里已用
excludeSwitches: ['enable-automation']和--disable-blink-features=AutomationControlled做伪装,但若 Chrome 版本过新或风控升级仍可能触发,换一版匹配的 Chrome + ChromeDriver 再试。 - "购买数量与实际观演人数量不符":
buy_nums与len(viewer)不一致,改参数即可,这是run()的第一道校验。 - "请检查输入的观演人信息与大麦网观演人信息是否一致":
step3_submit_order会做set(viewer) & set(页面观演人)的交集比对,全等才放行。姓名里多了空格、繁简体不一致都会挂,直接复制页面上的原文。 get_api_param()正则匹配不到、接口返回解析异常:这组正则依赖 g.alicdn.com 上vendor.js/perform.js的既有结构,站点一改版就会失配,需要自己重新抓包对照修改。README 已声明停止维护且 PC 端流程多迁至手机端,接口层面的问题目前只能自己动手。
该用它,还是该弃用它
判断标准一条:你的目标商品还走 PC 端"立即购买/选座购买"流程,且你的目的是学习"登录拿 Cookie → 接口串流程 → 轮询下单"这套自动化下单写法,用它,代码短、链路完整、tools.py 每一步都有注释;目标商品只有 App 流程、或 PC 端接口已改版,就别耗在打补丁上——官方 App + 抓包重写才是正路。
最后照 README 的免责声明说一句:本仓库 MIT 协议、仅供个人学习参考,勿用于商业倒卖。延伸阅读建议从 README.md 的流程图看起,再对照 signcode.js 理解 mtop 签名怎么算。
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考