大麦抢票脚本 Automatic_ticket_purchase 完整实操指南:从登录到下单
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
Automatic_ticket_purchase 是一个用 Python 写的大麦抢票脚本:它把"登录 → 盯票状态 → 提交订单"整条链路自动跑完,只有首次登录用 selenium 驱动真实浏览器,其余全部是 requests 纯接口请求。适合想研究 Web 自动化或想开票前实测一遍流程的读者,前提是你有 Python 3 环境和一个大麦账号。
⚙️ 跑之前的准备:对照这张清单表
| 准备项 | 作用 | 获取方式 | 怎么确认到位 |
|---|---|---|---|
| Python 3 与 requirements.txt 中的 4 个库(beautifulsoup4、requests、selenium、pyexecjs) | 页面解析、接口请求、selenium 登录、选座签名 | 克隆仓库后执行pip install -r requirements.txt | 四个库版本与文件内==锁定一致 |
| ChromeDriver 驱动 | selenium 启动真实 Chrome 完成登录 | 下载与本机 Chrome 版本匹配的驱动,放入项目根目录并按平台重命名:Windows 为chromedriver_windows、Linux 为chromedriver_linux、macOS 为chromedriver_mac | 根目录存在对应文件,tools.py 按platform.system()以这个文件名定位 |
| 大麦账号与常用购票人 | 登录凭证、下单观演人 | 在大麦网页端维护"我的大麦 → 常用购票人管理" | 网页可正常登录,购票人列表非空 |
| Node.js 运行环境 | 选座路径用 pyexecjs 执行 signcode.js 计算 sign 签名 | 自行安装 Node.js | node -v能输出版本号 |
最短安装链:
git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase cd Automatic_ticket_purchase && pip install -r requirements.txt🔑 先把登录跑通:最小登录路径
首次运行没有凭证,必须走一次真实页面登录,两种方式二选一:
- 账号密码:先把 Automatic_ticket_purchase.py 的
__init__里login_id、login_password换成真实值,再运行python Automatic_ticket_purchase.py(默认--mode account)。 - 扫码:运行
python Automatic_ticket_purchase.py --mode qr,脚本在页面等你扫码。
selenium 打开大麦登录页,自动填账号密码(或等待扫码),等页面标题跳回大麦首页后收集 cookie,再请求"我的大麦-个人信息"页面,标题校验通过才调用 tools.py 的save_cookies把凭证写进项目根目录的cookies.pkl。这是唯一需要真实浏览器的环节。之后每次运行,load_cookies直接从cookies.pkl读凭证跳过页面——cookie 就像门禁卡,刷过一次,后面直接进门。
📝 关键参数一次讲全:6 处全在__init__里
| 参数 | 改在哪 | 取值规则 | 填错的后果 |
|---|---|---|---|
login_id/login_password | Automatic_ticket_purchase.py 的__init__ | 大麦账号名与密码,仅账号登录方式需要 | 浏览器内登录失败,打印"登录异常,请检查页面登录提示信息" |
item_id | 同上 | 演出商品编号,int类型 | 取到错误城市的演出数据,按钮状态与预期对不上 |
viewer | 同上 | 大麦已登记的常用购票人姓名列表,须逐字一致 | 打印"请检查输入的观演人信息与大麦网观演人信息是否一致"并中止提交 |
buy_nums | 同上 | 购买张数,必须等于len(viewer) | 打印"购买数量与实际观演人数量不符",run()直接退出 |
ticket_price | 同上 | 目标票价数字,必须存在于该演出页面的票价列表 | 未填打印"票价未填写, 请选择票价";票价不存在则定位不到目标 sku |
正确值从哪里取:
item_id:打开目标演出页面 → 看地址栏 → 复制id=后面的数字,同一巡演每个城市编号不同。
viewer:进入"我的大麦 → 常用购票人管理",照抄名单里的姓名。
ticket_price:从演出页面票价列表里挑一个;选座模式下它同时是筛选座位的唯一价位。
🔄 运行之后按时间线拆成 4 个阶段
阶段一 · 凭证校验(读文件或浏览器)。run()先检查cookies.pkl:存在就直接加载,不存在才走页面登录。随后check_login_status用凭证请求"我的大麦-个人信息",标题一致才算通过,不通过打印"登录失败, 请检查登录账号信息"。
阶段二 · 状态轮询(纯接口)。while True死循环里,step1_get_order_info每轮请求 detail.damai.cn 的接口,取回该演出的 sku 列表和各价位按钮文字btnText,按文字分支:"即将开抢" → 继续等;"缺货登记" → 打印"手慢了"并退出;"立即购买"/"选座购买" → 进入下单流程。
阶段三 · 下单提交(纯接口)。非选座路径走step2_click_buy_now请求 orderConfirm(等价于点"立即购买"),从页面解析window.__INIT_DATA__;选座路径在提交前多拉一次座位数据。随后step3_submit_order把viewer与接口返回的观演人列表逐一核对,命中的标记isUsed(选座模式再逐个分配seatId),最后 POST 到 createOrder 接口。
阶段四 · 支付确认(你本人操作)。成功后控制台打印alipayOrderId和支付宝支付链接,你再去"我的大麦 → 交易中心 → 订单管理"核对订单并按时支付。
🧭 不同模式的执行差异
- 账号登录 vs 扫码登录:只影响阶段一的登录动作(自动填表单回车 vs 等扫码),两者最终都落到
cookies.pkl,之后路径完全相同。 - 非选座演出(默认路径):按钮文字为"立即购买",轮询命中后请求 orderConfirm、再 createOrder,最短链路。
- 选座演出(V2.1 新增):按钮文字为"选座购买",多走 4 步:取演出参数(project_id、perform_id、city_id)→ 带 sign 签名请求座位动态接口(签名由 pyexecjs 执行 signcode.js 计算)→ 拉取座位图文件与可售座位接口 →
format_valuable_seatid过滤出目标价位可售座位,pick_seat按座位图顺序取前buy_nums个。两条硬限制:只支持一种目标价位;不支持连坐。
🛠️ 排障对照:提示、原因、动作
| 控制台提示 / 现象 | 最可能原因 | 处理动作 |
|---|---|---|
| 登录异常,请检查页面登录提示信息 | 账号密码错误或触发滑块验证 | 先手动在网页登录一次,确认账号正常 |
| 登录失败, 请检查登录账号信息 | cookies.pkl已过期 | 删除该文件后重新运行登录 |
| 加载cookies失败 | cookies.pkl文件损坏 | 同上,删除后重新登录 |
| 请检查输入的观演人信息与大麦网观演人信息是否一致 | viewer与常用购票人不逐字一致 | 打开"常用购票人管理"逐个比对修正 |
| 购买数量与实际观演人数量不符 | buy_nums不等于len(viewer) | 改参数使两者一致 |
| 获取购买必备参数异常 | 大麦订单页结构变化,step2_click_buy_now解析失败 | 核对window.__INIT_DATA__的解析逻辑 |
| 按钮长期停在"即将开抢" | item_id指向了其他城市 | 重开目标城市演出页取地址栏id= |
| 票价未填写, 请选择票价 / 获取sku_id失败 | ticket_price未填或与票价列表对不上 | 从票价列表里选一个填入 |
| 手慢了,该票价已经售空 | 该价位已售罄 | 脚本已退出,无可处理 |
⚖️ 使用边界
- README.md 首行即"已停止维护":大部分购买方式已迁移至手机端,继续可用需配合抓包,暂无更新计划。
- 接口参数与页面解析全部写死在代码里,
get_api_param甚至锁定了特定版本的前端 JS,大麦前端更新后可能整体失效。 - 免责声明:仅限个人参考学习,勿用于商业用途或倒票,详见 LICENSE。
- 轮询主循环是死循环、每轮一次请求,注意控制请求频率,别长期挂在高负载网络环境里。
❓ 快速问答
Q:ChromeDriver 文件怎么命名?A:放项目根目录,按平台叫chromedriver_windows、chromedriver_linux、chromedriver_mac,tools.py 按操作系统自动定位。
Q:cookies.pkl 过期了怎么办?A:校验会失败并提示登录失败,删除该文件重新运行一次即可重新生成。
Q:选座购买能选连座吗?A:不能。pick_seat只按座位图顺序取前 N 个同价位可售座位。
Q:什么时候需要 Node.js?A:只有选座路径需要,sign 签名由 pyexecjs 执行 signcode.js 计算。
Q:非选座和选座路径的差别就只是多几步请求吗?A:是。分支入口就是按钮文字:btnText为"立即购买"走默认路径,为"选座购买"才多拉座位数据。
下一步:按"准备清单表"配好环境,先把登录跑通拿到cookies.pkl,再依次替换 6 个参数验证轮询逻辑。
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考