☰
大麦抢票脚本 Automatic_ticket_purchase 完整实操指南:从登录到下单
2026/10/15 12:03:59 网站建设 项目流程

大麦抢票脚本 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.jsnode -v能输出版本号

最短安装链:

git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase cd Automatic_ticket_purchase && pip install -r requirements.txt

🔑 先把登录跑通:最小登录路径

首次运行没有凭证,必须走一次真实页面登录,两种方式二选一:

  1. 账号密码:先把 Automatic_ticket_purchase.py 的__init__里login_id、login_password换成真实值,再运行python Automatic_ticket_purchase.py(默认--mode account)。
  2. 扫码:运行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_passwordAutomatic_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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询