大麦网抢票脚本: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),仅供参考