news 2026/9/28 3:26:35

大麦网抢票脚本:Selenium 只管登录,下单走 requests 直连接口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大麦网抢票脚本:Selenium 只管登录,下单走 requests 直连接口

大麦网抢票脚本:Selenium 只管登录,下单走 requests 直连接口

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

这是一个大麦网抢票脚本(V2.1):Selenium 只负责完成浏览器登录,剩下的流程——从拉取 SKU 信息到提交订单——全部通过 requests 直接发 HTTP 请求完成,把页面渲染的等待时间压掉。

🧭 看懂下单流程

浏览器只负责登录

Selenium 打开大麦 passport 登录页,账号密码和扫码都支持。页面标题回到大麦首页后,把全部 cookie 取出存进cookies.pkl。之后每次运行直接读这个文件,不再开浏览器,下单链路里不再出现浏览器。

后续流程干三件事

  • 动态取参数:请求参数不写在代码里。get_api_param()实时拉取大麦前端 JS 包,用正则提取参数;选座接口再用 PyExecJS 在本地跑signcode.js算出 mtop 签名。
  • 按钮文案驱动主循环:轮询 subpage 接口,读目标价位的 btnText。"即将开抢"继续轮询,"立即购买"进入下单流程,"缺货登记"直接结束。
  • 选座分支:btnText 是"选座购买"时,走 mtop 接口取座位图,按价位和可售状态过滤后按简单规则挑出几个座位。

🚀 最小配置跑通脚本

装依赖并放好驱动

克隆仓库后安装 requirements.txt。Python 包之外唯一的额外依赖是 ChromeDriver:下载与本地 Chrome 匹配的版本,放进项目根目录,并按系统重命名为chromedriver_linux/chromedriver_windows/chromedriver_mac(命名约定见 tools.py 的account_login)。

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

核对六行配置

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 # 目标价位

item_id是详情页地址栏id=后面那串数字,每个城市站不同;viewer里的姓名必须与大麦"常用购票人"完全一致。

首次运行

python Automatic_ticket_purchase.py # 默认账号密码登录 python Automatic_ticket_purchase.py --mode qr # 改用扫码登录

首次没有 cookies 时默认走账号密码登录,加--mode qr可切换扫码。

🔍 细读三个关键实现

登录浏览器用完即弃

常见做法是全程在浏览器里点,这个项目只在标题变为大麦首页前用 Selenium,随后所有环节走requests.Session的 HTTP 请求,cookie 在流程中持续更新。省掉的不只是页面渲染时间,还有元素定位与等待。

参数从 JS 里现取,不硬编码

exParams、commodity_param这些请求参数由get_api_param()从前端 JS 包里下载,正则取出data字段再解析成字典。参数跟着前端版本走,只要代码结构没变就不用人工同步。选座接口更复杂:mtop 接口要求 sign,用 execjs 调本地 signcode.js 的calcaulate函数实时计算。

按钮文案当状态机

主循环不解析 DOM,只看目标 sku 的 btnText:"即将开抢"→ 继续轮询;"立即购买"→ 进入 step2 取订单确认页的window.__INIT_DATA__;"选座购买"→ 切选座分支;"缺货登记"→ 退出。每个状态出口明确,循环体很短。

📌 遇到这四个问题怎么办

  • 遇到首次运行起浏览器报错或驱动版本错误,一般是 ChromeDriver 与 Chrome 版本不匹配,可以下载对应版本、按系统重命名后放到根目录。
  • 遇到打印"登录失败"且目录里存在cookies.pkl,可以删掉该文件重新运行——旧文件里多半是过期 cookie。
  • 遇到"请检查输入的观演人信息与大麦网观演人信息是否一致",可以核对viewer与常用购票人姓名是否逐字相同,以及buy_nums是否等于人数。
  • 遇到"获取购买必备参数异常",多半是前端 JS 结构变了,可以按get_api_param里的注释重新提取参数并修正正则。

❓ 回答四个常见问题

  • 能不能放心用?README 写明仅用于个人参考学习。脚本自身请求频率不高,但商用倒卖等滥用需自担后果。
  • 要不要会编程?改六行配置、跑一条命令即可;要处理报错时,得看得懂打印的提示。
  • 支持选连座吗?V2.1 支持选座购买,但只抢指定价位下的座位,不支持连坐。
  • 现在还能跑吗?README 开头已注明停止维护:多数购买方式迁到手机端,PC 接口随时可能失效,坏了得自己重新抓包分析。

带走可复用的做法

"Selenium 登录 + cookie 落盘 + requests 下单"这套组合不绑定大麦,换掉接口参数就能迁移到其他登录态自动化任务,也是学习接口抓包与参数逆向的现成样例。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!