大麦网自动抢票脚本完整上手指南:环境搭建、参数配置与排错一次讲清

发布时间:2026/11/1 1:47:04
大麦网自动抢票脚本完整上手指南:环境搭建、参数配置与排错一次讲清

大麦网自动抢票脚本完整上手指南:环境搭建、参数配置与排错一次讲清

【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase

Automatic_ticket_purchase 是一个面向学习研究的大麦网自动抢票脚本(V2.1):首次登录由 Selenium 打开浏览器完成,之后的票价状态监控与下单全部改用 requests 直发 HTTP 请求,并支持选座购买。本文带你从零搭建环境、跑通脚本、看懂内部执行链路,并配好全部关键参数。

它是什么、适合谁

这个项目的思路是"登录走页面、下单走接口"。登录阶段,Selenium 启动 Chrome 打开大麦登录页,支持账号密码(默认)和扫码(--mode qr)两种方式,登录成功后把 cookies 存到本地cookies.pkl;之后的每一步——查询 SKU、监控按钮状态、请求订单确认页、提交 createOrder——都是纯 HTTP 请求,不依赖页面元素加载,速度上优于早期基于按钮点击的版本。

它适合你拿来学习大麦网 PC 端购票链路的接口结构:SKU 参数怎么拼、下单参数从哪个页面字段解析、选座签名怎么算。不建议的场景同样明确:

  • 仅供个人学习研究,不构成任何结果承诺。使用时遵守大麦网及相关平台条款,控制请求频率,不影响平台正常服务,勿用于商业倒卖。
  • README.md 已标注项目停止维护,部分购买方式已迁移至手机端,接口可能随平台更新失效,使用前的接口可用性需要你自己逐一验证。

部署准备:环境与依赖

先备齐四样东西,缺一不可:

  1. Python 3:运行脚本的主体环境。
  2. Chrome 浏览器:首次登录时由 Selenium 驱动它完成登录。
  3. ChromeDriver:Selenium 与 Chrome 之间的桥接驱动,版本必须与本地 Chrome 大版本一致,否则浏览器无法启动。下载后按系统重命名并放到项目根目录:Windows 下命名为chromedriver_windows,Linux 下chromedriver_linux,macOS 下chromedriver_mac,路径选取逻辑在 tools.py 的account_login函数中。注意代码使用的是旧版 Selenium API(如find_element_by_name),所以请选用与旧版 API 兼容的驱动版本,不要盲目取最新号。
  4. Node.js:仅选座购买场景需要。requirements.txt中的pyexecjs依赖 Node.js 运行时来执行 signcode.js,计算选座接口的sign参数;只买"立即购买"类场次可以不要。

依赖包共四个,版本在 requirements.txt 中锁定:requests==2.24.0、selenium==3.141.0、beautifulsoup4==4.9.3、pyexecjs==1.5.1。安装命令:

pip install -r requirements.txt

从零跑通:部署与启动

按顺序执行下面的步骤,每步附一句白话说明。

第一步,获取源码:

git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase

把项目仓库拉到本地工作目录。

第二步,安装 Python 依赖:

cd Automatic_ticket_purchase pip install -r requirements.txt

进入项目目录,装齐 requests、selenium、beautifulsoup4、pyexecjs 四个包。

第三步,配置 ChromeDriver:下载与本地 Chrome 匹配版本的驱动,按系统重命名(如chromedriver_windows),放到项目根目录。这一步让 Selenium 能找到驱动并成功拉起浏览器。

第四步,修改 Automatic_ticket_purchase.py 中DaMaiTicket.__init__的六个参数(下一节详解)。

第五步,启动脚本:

python Automatic_ticket_purchase.py

默认走账号密码登录并进入购票监控循环;改用扫码登录时追加参数:

python Automatic_ticket_purchase.py --mode qr

首次运行会弹出 Chrome 登录页,登录成功后 cookies 写入cookies.pkl,之后再次运行直接复用登录态,不再开浏览器。

执行链路拆解

理解下面四个阶段,再看参数会清晰很多。

1. 登录态检查。run()启动时先检查本地是否存在cookies.pkl:存在就直接load_cookies加载;不存在则按--mode参数走 Selenium 登录(account输入账号密码,qr扫码)。无论哪种方式,登录都会经check_login_status验证——请求passport.damai.cn/accountinfo/myinfo,页面标题等于"我的大麦-个人信息"才算登录有效。验证通过且本地没有 cookies 文件时,自动save_cookies落盘。

2. 公共参数准备。tools.get_api_param()下载大麦前端 js,用正则解析出两组后续请求必需的参数:commodity_param(查询商品 SKU 用)和ex_params(请求订单确认页用)。选座场景下,选座接口的sign参数还会通过get_sign_code调用 signcode.js 实时计算。

3. 票价状态监控。run()进入死循环,每轮调用step1_get_order_info请求detail.damai.cn/subpage,从返回的skuList中定位ticket_price对应的档位,再读该档位的按钮文字btnText,据此分支:

  • 即将开抢:继续循环等待;
  • 缺货登记:打印"手慢了,该票价已经售空"并退出;
  • 立即购买:组装buy_serial_number,进入普通下单分支;
  • 选座购买:依次调用get_select_seat_params(拿 city_id、project_id、perform_id)、get_seat_dynamic_info(拿 standId 与价格列表)、get_select_seat_api(拿座位资源地址)、get_valuable_seat_id(拿可售座位),过滤出目标价位且可售的座位后,由pick_seat按buy_nums挑出座位,进入选座下单分支。

4. 下单与支付。两条分支都先请求buy.damai.cn/orderConfirm拿到window.__INIT_DATA__中的submit_order_info;随后step3_submit_order在其中找到观演人字段dmViewerPC_*,把viewer列表与账号内常用购票人dmViewerList逐字比对,命中不一致会打印提示并放弃;一致则勾选对应观演人(选座时还会把座位 id 写入对应观演人),POST 到buy.damai.cn/multi/trans/createOrder。返回success为 True 且含alipayOrderId时,打印订单号与支付宝支付链接。

核心配置详解

需要修改的参数集中在 Automatic_ticket_purchase.py 的__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 # 购买指定票价
参数含义取值来源易错点
login_id / login_password大麦账号与密码,仅在首次 Selenium 登录时使用你登录大麦官网的账号密码密码错误时只能删cookies.pkl重新登录
item_id目标场次(商品)的唯一标识,int 类型演出商品详情页地址栏detail.damai.cn/item.htm?id=…中的 id 数字同一演出不同城市站 id 不同,切换场次必须重查
viewer购票人姓名列表大麦网"常用购票人"页中的姓名须与网站逐字一致,含大小写与空格
buy_nums购买票数按需求自定必须等于len(viewer),否则启动即报"购买数量与实际观演人数量不符"
ticket_price指定票价档位数值商品详情页该档位显示的数字,如 180只买这一档;不填会打印"票价未填写, 请选择票价"并中止

item_id 就取商品页地址栏里的 id,指向位置如上图。切换城市站后重新核对,填错会导致查不到商品或档位。

viewer 的取值必须和上图"常用购票人"页里的姓名一字不差。不一致时,脚本会在提交 createOrder 之前拦截,打印"请检查输入的观演人信息与大麦网观演人信息是否一致"并返回,不会真的下单。

参数间的两条一致性约束要记住:len(viewer) == buy_nums,viewer中每个名字 ∈ 账号常用购票人集合。

让它更稳:调优建议

  • 开抢前同步系统时间与网络时间。选座接口用datetime.now()生成毫秒级时间戳参与签名计算,时间偏差会直接影响sign是否被服务端接受。
  • 选预售期或已散场时段先完整跑一遍全流程,验证登录态、get_api_param的参数解析和选座签名链路都正常,再决定开抢时段的用法。
  • 登录失败或行为异常时,删除本地cookies.pkl重新登录,排除过期登录态干扰。
  • 使用延迟低、丢包少的网络,避免与其他高带宽任务共用链路;下单环节只有"请求一次"的动作,网络抖动即意味着失败。
  • 因为项目已停止维护,开抢前对照 tools.py 中get_api_param的注释,确认前端 js 版本与正则解析仍然匹配,再确认各 mtop 接口可用。
  • 登录环节如果账号密码方式频繁触发安全验证,可改用--mode qr扫码登录,绕开自动输入密码被风控拦截的情况。

故障速查:高频问题与解法

现象可能原因处理方式
启动后打印"登录失败, 请检查登录账号信息"cookies.pkl已过期,或账号密码错误删除本地cookies.pkl,重新走一遍登录流程
Chrome 打不开,或登录页出现滑块卡住ChromeDriver 与浏览器版本不一致,或自动化特征被识别换与 Chrome 大版本匹配的驱动并按系统重命名放入根目录
打印"票价未填写, 请选择票价"ticket_price为空,或档位不匹配核对ticket_price与商品页档位数值完全一致
打印"获取sku_id失败"(选座场景)该场次价格列表中找不到与ticket_price对应的档位对照座位页价格列表修正票价数值
打印"购买数量与实际观演人数量不符"buy_nums与len(viewer)不等让两者相等,如 2 名购票人买 2 张
打印"请检查输入的观演人信息与大麦网观演人信息是否一致"viewer 姓名与常用购票人有细微差异登录大麦网在常用购票人页逐字核对姓名后修正
打印"获取购买必备参数异常,请重新解析response返回的参数"前端 js 更新,get_api_param或订单确认页解析失效按 tools.py 中该函数注释重新解析参数,或确认接口是否可用

本项目仅供学习与研究使用,不构成任何结果承诺。使用其代码时请遵守大麦网及相关平台的使用条款,自行控制请求频率,确保不影响平台正常服务,商业使用风险与责任由使用者自行承担。

【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考