Python大麦抢票脚本完整指南:从环境配置到自动化下单全流程
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
开票前 3 秒你按下购买,页面还卡在加载,几秒后屏幕只剩"缺货登记"——这就是手动抢票的真实处境。这套大麦抢票脚本 Automatic_ticket_purchase 就是干这件事的:用浏览器完成一次登录后,全程切换为纯 API 请求,持续盯住票档状态,按钮一旦变成"立即购买"就自动走完下单流程,不需要你再碰鼠标。
🎯 项目速览:这套大麦抢票脚本是什么
- 定位:面向大麦网(damai.cn)PC 网页端的自动抢票工具,V2.1 版本,核心逻辑集中在 核心源码(一个
DaMaiTicket类)和 工具函数库 两个文件里,没有复杂架构,读完一遍就能懂。 - 解决什么问题:人工抢票的瓶颈不在"手速",而在"浏览器要渲染页面、人眼要确认状态"。脚本把这两件事都省掉——登录之外的一切操作都直接打接口,毫秒级完成。
- 核心亮点:
- 双引擎设计:Selenium 只负责登录(账号密码 / 扫码 / 短信),抢票阶段完全用 Requests 直连 API;
- Cookie 复用:首次登录后把 Cookie 存进
cookies.pkl,再次运行不再弹浏览器; - 状态机监控:循环检查目标票档的按钮文案("即将开抢 / 立即购买 / 缺货登记 / 选座购买"),自动决策下一步;
- V2.1 支持选座购买:自动拉取座位图、过滤可售座位、按顺序选座(暂不支持连坐)。
- 一句实话:README.md 顶部明确标注"已停止维护"——大麦的大部分购买流程已迁移到手机端,纯 PC 网页链路需要配合抓包才能维持。把它当作学习"浏览器自动化 + 接口调用"混合架构的优质范本来看,价值比当工具更大。
🚀 快速上手:大麦抢票脚本安装与首次运行
安装依赖与配置 ChromeDriver
# 1. 克隆项目 git clone https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase # 2. 安装依赖(selenium 3.141.0 / requests / beautifulsoup4 / pyexecjs) pip install -r requirements.txt注意一点:项目锁定的 selenium 是 3.141.0 老版本,必须手动指定 ChromeDriver 路径。去 ChromeDriver 官方下载页取与你 Chrome 版本匹配的驱动,按系统重命名后放到项目根目录:
chromedriver_linux / chromedriver_windows / chromedriver_mac对应 tools.py 里account_login函数的查找逻辑,命名不对浏览器就打不开。选座功能还会用到execjs执行 JS 签名,如果你要跑选座分支,需另外装一个 Node.js 运行环境。
如何获取 item_id 并配置抢票参数
编辑 Automatic_ticket_purchase.py 的__init__,一共 6 个参数:
self.login_id: str = 'account' # 大麦账号(账号登录方式必填) self.login_password: str = 'password' # 大麦密码 self.item_id: int = 610820299671 # 商品ID:同一场演出每个城市都不同 self.viewer: list = ['你的姓名'] # 观演人,须与大麦网登记的名字完全一致 self.buy_nums: int = 1 # 购买数量,必须等于观演人人数 self.ticket_price: int = 180 # 目标票价(元),用于匹配 skuitem_id怎么拿?浏览器打开目标演出页,地址栏id=后面那串数字就是:
viewer里填的名字必须与大麦"常用购票人管理"中登记的信息一字不差,脚本在提交订单前会用接口返回的观演人列表做一次校验,对不上会直接终止:
首次运行大麦抢票脚本
# 默认:账号密码登录(会打开 Chrome) python Automatic_ticket_purchase.py # 或改用扫码登录(推荐,避免密码明文) python Automatic_ticket_purchase.py --mode qr首次运行会弹出浏览器登录。登录成功后 Cookie 自动写入cookies.pkl,之后的运行直接复用登录态,脚本一启动就进入抢票主循环。抢票成功后终端会打印支付宝订单号和支付链接,记得去"交易中心 → 订单管理"确认并支付。
🔍 核心机制拆解:脚本如何三步完成抢购
整体流程是一个状态机,README.md 里的流程图讲得很清楚:
登录阶段:Selenium 只做这一件事
account_login用 Chrome 打开登录页,账号模式下切进alibaba-login-boxiframe 填账号密码回车,扫码模式则等页面标题变成大麦首页标题(WebDriverWait最长等 180 秒)。拿到 Cookie 后还有一道check_login_status校验——请求"我的大麦"个人页,用 BeautifulSoup 比对<title>是否为"我的大麦-个人信息",防止"看似登录实则没登"。
这段代码里藏着两个反自动化检测的细节,值得抄走:
option.add_experimental_option('excludeSwitches', ['enable-automation']) # 关掉 webdriver 特征 option.add_argument('--disable-blink-features=AutomationControlled') # 防滑块拦截不加这两行,navigator.webdriver暴露自动化身份,登录页大概率弹滑块卡死。
抢票主循环:盯住按钮文案做决策
登录后脚本进入while True死循环,每一轮做三件事:
- step1 取商品信息:请求
detail.damai.cn/subpage,从返回的skuList里按ticket_price匹配出目标sku_id,同时读出该票档按钮的文案btnText; - 按文案分支:
即将开抢→ 继续循环;缺货登记→ 结束并提示;立即购买→ 进入下单;选座购买→ 进选座分支; - 下单两步走:
step2_click_buy_now请求buy.damai.cn/orderConfirm并正则抠出页面里的window.__INIT_DATA__(订单确认页的全部数据);step3_submit_order校验观演人后 POSTcreateOrder提交。
也就是说,脚本"快"的本质不是发请求快,而是省掉了所有渲染和人工确认:你盯着页面看"能不能买"的那几秒,就是它拉开的差距。
还有一个容易忽略的细节:get_api_param函数是正则解析大麦前端 JS 源码(g.alicdn.com上的 vendor.js)来提取请求参数模板的。这意味着大麦一旦升级前端 JS,这套正则就会失配——这也是此类接口型脚本最脆弱的一环,下文 FAQ 会再提。
选座分支:JS 签名 + 自动选座
选座购买的请求走mtop.damai.cn网关,必须带一个sign参数。signcode.js 里是作者从大麦页面扒下来的签名函数(本质是一段 MD5 变体实现),get_sign_code用execjs在 Node 里执行它算出签名。
拿到签名后,脚本依次:拉取座位区数据 → 查询可售座位状态 → 按"楼层 → 排 → 列"构建座位树并过滤掉不可售座位和价格不符的座位 →pick_seat从树上按序取buy_nums个seatId→ 走orderConfirm确认选座 → 提交订单。
pick_seat的实现非常朴素——遍历顺序取前 N 个可用座位,不保证连坐。想改选座策略(比如偏好中间区、连坐优先),只需重写这个函数。
🛠 进阶技巧与常见坑
- 先跑通登录再抢票:开票前几小时先把脚本跑到"登录成功、进入监控循环"的状态,让
cookies.pkl就位。开抢时脚本秒进主循环,比现场现登录省下至少几十秒。 buy_nums与viewer数量不一致会直接退出:run()第一行就校验,比如买 2 张票viewer就必须写 2 个名字。- 观演人校验失败是高频报错:"请检查输入的观演人信息与大麦网观演人信息是否一致",通常是名字含生僻字、多打了空格,或该观演人未在"常用购票人"里启用。
- 登录态失效的处理:终端提示"登录失败"时,删掉
cookies.pkl重新运行即可;大麦 Cookie 有效期有限,跨天使用建议重登。 - 前端 JS 变更导致解析异常:如果 step2 打印"获取购买必备参数异常",说明
window.__INIT_DATA__的结构或get_api_param里的正则匹配不上了,需要打开大麦页面重新抓一遍 JS 修 tools.py 对应函数。这是该项目停更后最大的使用障碍。 - 网络环境:有线网络 + 关掉占带宽的后台程序。脚本循环间隔由接口响应时间决定,不要人为把间隔改得更短去"刷",高频异常请求只会触发风控。
- 成功 ≠ 出票:脚本打印"抢票成功"只代表订单创建成功,支付宝支付链接需要在有效期内完成付款,别挂完就关终端。
❓ 常见问题 FAQ
Q:完全不懂代码,只改 6 个参数能跑吗?能,但前提环境得装对:Python、依赖、ChromeDriver 三者版本匹配。建议先用--mode qr扫码登录跑一次冷门场次,确认能走到"监控票状态"的循环,再上真正的开抢。
Q:为什么每次运行都弹浏览器?说明cookies.pkl没生成或已失效。可能原因:首次登录没等页面完全跳回大麦首页、扫码超时(脚本只等 180 秒)、或大麦 Cookie 过期。手动删除cookies.pkl重新登录一次。
Q:支持连坐吗?能指定区域选座吗?当前 V2.1 选座只按座位树顺序取前 N 个可售座位,不支持连坐,也不能指定"内场/看台 A 区"。pick_seat是个十几行的函数,按排号排序、按奇偶行配对都能自己改。
Q:项目停更了,现在还能用吗?能用于学习和低热度场次的实战,但热门演出要谨慎:大麦已将多数购买流程迁到手机端,PC 端接口和反爬策略随时可能变化,作者也明确无更新计划。把它当成一套"活的教学案例"——登录反检测、接口逆向、JS 签名复现、状态机设计,四个知识点都在几十行代码里。
Q:ChromeDriver 版本不匹配会怎样?Chrome 90 之后版本严格校验,不匹配会报session not created直接崩。原则是驱动版本与浏览器版本的大版本号一致。
Q:有封号风险吗?脚本没有做高频轰炸,请求节奏跟随接口响应,正常个人使用风险可控,但任何绕过前端直接调接口的行为都可能在风控升级时失效。建议只用于个人购票,别转售,别多账号轮询。
📌 结语
这套大麦抢票脚本的真正价值,是把"一次登录、全程接口、状态机决策、JS 签名复现"这套完整的自动化链路压缩到了 500 行以内的可读代码里——哪怕它已经停更,也足够你拆解清楚一个 Web 抢票系统是怎么跑起来的。
技术的价值在于服务自己:用它帮自己抢下一张想看很久的演出票是合理需求,但请保持对个人使用的边界——不商用、不转售、不施压服务器,尊重平台规则和其他抢票者的公平机会。
【免费下载链接】Automatic_ticket_purchase大麦网抢票脚本项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考