大麦抢票脚本 Automatic_ticket_purchase 实操指南:从环境配置到出单的最快路径
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
Automatic_ticket_purchase 是一个用 Python 写的大麦抢票脚本:登录环节用 selenium 打开浏览器,其余「登录 → 盯票状态 → 提交订单」链路全部改用 requests 直接请求大麦的购票接口,把整条链路自动跑完。适合想上手「selenium 登录 + requests 下单」的开发者,也适合想在开票前实测一遍流程的票友。下面按安装、参数、报错排查展开,给出最短可运行路径。
🛠️ 跑通之前的准备
这节只解决从 clone 到首次启动的环境和驱动问题,不涉及参数。
安装依赖
git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase cd Automatic_ticket_purchase pip install -r requirements.txtrequirements.txt 里固定了 4 个库:selenium、requests、beautifulsoup4、pyexecjs。注意 selenium 锁在 3.141.0 这个旧版本,如果安装或运行报错,换 Python 3.8 及以下的环境最稳。
ChromeDriver 放哪里
从官方渠道下载与本机 Chrome 版本匹配的驱动,放进项目根目录,并按平台重命名,tools.py 是按这套文件名找驱动的:
- Windows:
chromedriver_windows - Linux:
chromedriver_linux - macOS:
chromedriver_mac
第一次运行
首次运行没有 cookie,必须先走一遍登录:
python Automatic_ticket_purchase.py # 账号密码登录 python Automatic_ticket_purchase.py --mode qr # 扫码登录登录成功后 cookie 会存进项目根目录的cookies.pkl,之后的运行直接读文件,不用重复登录。
🎯 必须替换的 4 个参数
这节只讲每个参数从哪取值,不讲运行流程。4 处参数都在 Automatic_ticket_purchase.py 的__init__里,默认值都是占位符,必须替换。
如何拿到 item_id
是什么:演出的唯一编号,同一场演出在不同城市、不同场馆对应不同编号。去哪找:打开目标演出页面,取地址栏里id=后面那串数字。
填错会怎样:按钮文字一直停在「即将开抢」,永远进不了下单流程。
viewer 和 buy_nums 怎么填
是什么:大麦里登记过的常用购票人姓名列表,加上购买张数;buy_nums必须等于viewer的长度。去哪找:「我的大麦 → 常用购票人管理」,名字要与界面逐字一致。
填错会怎样:提交订单时分别提示「请检查输入的观演人信息与大麦网观演人信息是否一致」(名字对不上)或「购买数量与实际观演人数量不符」(数量不符),脚本直接终止。
ticket_price 从哪来
是什么:目标票价(数字),脚本用它从演出的价格列表中定位对应 sku_id,选座购买时它也是过滤座位的唯一价位。去哪找:演出页面上实际在售的价格档位列表,挑一档真实存在的。填错会怎样:第一步取不到 sku_id,提示「票价未填写, 请选择票价」(没填)或「获取sku_id失败」(列表里没有这个价)。
⚙️ 脚本实际在做什么
这节按执行时间线讲跑起来后后台依次发生了什么,不按代码模块解析。
- 登录(唯一打开浏览器的环节):先看
cookies.pkl在不在,在就直接加载;不在则 selenium 打开大麦登录页,自动填账号密码(或等扫码),等页面标题跳回大麦首页后收集 cookie,再请求「我的大麦-个人信息」接口核对,通过才写入cookies.pkl——cookie 就像门禁卡,刷过一次之后后面直接进门。 - 取接口参数:从大麦页面的 JS 代码里解析出后续请求所需的固定参数,前端更新后这一步可能失效。
- 轮询:主循环每轮请求演出 SKU 接口,读目标价位的按钮文字决定下一步:「即将开抢」继续等,「缺货登记」退出,「立即购买」进下单,「选座购买」进选座流程。
- 订单确认:用目标 sku 请求订单确认页,等价于手动点了一次「立即购买」,从返回里解析出提交订单所需的全部参数。
- 提交订单:POST 订单接口,成功则控制台打印
alipayOrderId和支付宝支付链接,去「我的大麦 → 交易中心 → 订单管理」核对并按时支付。
购买阶段全程是纯接口请求,浏览器此时已经关掉。
🔀 不同场景走不同路径
这节按演出类型区分两条执行路径,对照自己的场景对号入座,不涉及参数修改。
非选座演出(默认路径)
按钮文字是「立即购买」,轮询命中后脚本依次请求订单确认和提交接口,成功后打印支付宝订单号,剩余支付动作需要手动完成。
选座购买(V2.1 新增)
按钮文字是「选座购买」时,脚本多走两步:请求座位接口拿到座位图和可售座位状态,再过滤出目标价位下可售的座位,按座位图顺序取前buy_nums个。两个限制要清楚:只支持一种目标价位,不支持连坐——tools.py 里的pick_seat就是按顺序取前 N 个。座位接口要求 sign 签名,签名算法在仓库的 signcode.js,由 pyexecjs 执行。
⚠️ 报错了,对着提示查
这节按控制台能看到的原文组织,把实际输出和下表对上即可。
| 提示原文 | 大概率原因 | 修复动作 |
|---|---|---|
| 登录失败, 请检查登录账号信息。若使用保存的cookies,则删除cookies文件重新尝试 | cookie 过期或登录没成功 | 删除cookies.pkl重新运行 |
| 登录异常,请检查页面登录提示信息 | 账号密码错误或触发滑块 | 先手动登录一次确认账号正常 |
| 购买数量与实际观演人数量不符 | buy_nums不等于viewer长度 | 把两者改一致 |
| 请检查输入的观演人信息与大麦网观演人信息是否一致 | 名字不在常用购票人里或有错别字 | 对照购票人管理界面逐字改viewer |
| 票价未填写, 请选择票价 | ticket_price还是占位符 | 填一个实际在售票价 |
| 获取sku_id失败 | 选座场景下票价不在档位列表里 | 对照演出页面价格列表改ticket_price |
| 手慢了,该票价已经售空 | 目标价位卖完了 | 换个价位或本场放弃 |
⚖️ 先认清它的边界
这节只列维护状态、已知限制和合规提醒,每条一句,不展开。
- README 第一行就是「已停止维护」:大部分购买方式已迁移至手机端,需配合抓包处理,暂无更新计划
- 接口参数与页面解析逻辑都写死在代码里,大麦前端更新后可能失效,需要自行跟进修改
- 免责声明见 LICENSE:仅限个人学习参考,勿商用、勿用于倒票
- 轮询是死循环,注意请求频率,别挂在高负载网络环境里长期运行
❓ 快问快答
这节回答 README 和代码注释里出现频率最高的 6 个问题,答案都控制在两句以内。
Q:ChromeDriver 文件怎么命名?放项目根目录,按平台叫chromedriver_windows、chromedriver_linux、chromedriver_mac,脚本按操作系统自动定位。
Q:viewer 和 buy_nums 不一致会怎样?run()开头就先校验,不一致直接打印提示退出,不会进入轮询。
Q:cookies.pkl 过期了怎么办?登录校验会失败并给出提示,删掉该文件重新登录一次即可。
Q:同一演出多个城市,item_id 怎么取?分别打开各城市的演出页面,地址栏id=后面的数字就是对应值,别混用。
Q:选座购买能选连座吗?不能,当前只按座位图顺序取前 N 个同价位可售座位。
Q:--mode 参数有什么用?默认账号密码登录,加--mode qr改成扫码登录,适合账号容易触发滑块的情况。
想练「selenium 登录 + requests 下单」这条链路的话,先把登录跑通,再替换 4 处参数体验一遍轮询逻辑。
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考