呢喃抢场妙妙脚本 这是一个基于 Python 的呢喃体育场馆自动抢场脚本。它结合了 Selenium (用于处理复杂的登录和 Cookies 获取) 和 Requests ( 用于高效的数据抓取和订单提交),支持定时任务、自动打码、滑块验证、自动同伴补全以及 Server酱消息推送。
- 自动登录: 使用 Selenium 模拟浏览器登录统一身份认证系统,自动识别图形验证码(基于
ddddocr)。 - 定时任务: 内置调度器 (
schedule),支持每天特定时间(脚本默认设置成 07:58)自动唤醒登录,并阻塞等待至 08:00 准时抢场。 - 自动滑块验证: 集成
ddddocr识别滑块缺口,并使用 AES 加密生成位置数据通过验证。 - 智能选场: 支持设置优先时间段,如果首选被占,支持灵活模式自动寻找当天其他空闲场次。
- 同伴补全: 如果指定的同伴人数不足,脚本会自动从账号的同伴列表中按顺序补充(具体顺序由返回值决定)。
- 消息推送: 抢场结果支持通过 Server酱 推送到微信/手机。
请确保你的电脑的 ** 3.8 ≤ Python ≤ 3.12** ,并安装了 Google Chrome 浏览器。
在项目根目录下,运行以下命令安装所需的 Python 库:
pip install -r requirements.txt在配置脚本前,你需要知道你想抢的项目ID(例如苏州校区网球场的ID)。有两种方法获取:
方法 A:运行辅助函数查看 (推荐)
- 打开
main.py,滑到最底部的if __name__ == "__main__":区域。 - 取消注释
print_parsed_gyms_data(campus_filter="苏州校区")这一行。- 如果你想查看所有校区的场馆,直接使用
print_parsed_gyms_data()即可。 - 一般来说体育场馆的更新很缓慢,如果那天苏州校区更新了新的体育场所,但是本地缓存没有,可以运行更新缓存的所有体育场馆,取消注释
更新缓存的所有体育场馆:的下面几行代码,同样注意配置好用户名和密码
# 更新缓存的所有体育场馆: # USERNAME = "241880000" # PASSWORD = "password" # url = "https://authserver.nju.edu.cn/authserver/login?service=https://ggtypt.nju.edu.cn/venue/login" # session = login(url, USERNAME, PASSWORD) # if session: # sort_all_campus_venues_data(session) - 如果你想查看所有校区的场馆,直接使用
- 运行脚本:
python main.py
- 控制台会打印出树状结构的场馆信息,找到你想要的项目 ID (例如
171)。
方法 B:自己查看本地缓存文件
查看 parsed_gym_data.json 文件。你可以直接打开这个文件,搜索场馆名称(如“羽毛球”),找到对应的 id 字段。
打开 main.py,修改底部的用户配置区域:
if __name__ == "__main__":
# === 用户配置 ===
USERNAME = "YOUR_STUDENT_ID" # 你的学号/工号
PASSWORD = "YOUR_PASSWORD" # 统一身份认证密码
TARGET_ID = 171 # 目标项目ID (通过第一步获取,如 171)
TARGET_BUDDIES = ['114514', '...'] # 指定同伴的学号/ID (如果没有同伴需求或者你不知道你的同伴ID,填 [],但是请你手动在系统上把你的同伴先添加好,脚本才能选择)
PRIORITY_TIMES = ["19:00", "20:00"] # 优先抢的时间段的起始时间 (如果不指定,填 [])
IS_FLEXIBLE = True # True: 优先时间段满了抢其他的; False: 只抢优先时间段
SERVER_API = "" # Server酱的推送API (不需要推送则留空)
# ...配置完成后,直接运行脚本:
python main.py- 控制台显示 "📅 计划每天 07:58 自动唤醒..." 即表示启动成功。
- 请保持电脑唤醒状态(不要休眠),脚本会在设定时间自动执行登录、等待和秒杀流程。
- 提高鲁棒性: 增加异常重试机制(如登录失败自动重试、网络超时重连),进一步优化滑块验证的通过率。
- 移除 Selenium: 目前登录依赖 Selenium 获取 Cookies,速度较慢且消耗资源。计划通过逆向 JS 加密(密码加密与验证码逻辑),实现纯 Requests 协议登录,大幅提升启动速度。
- 云端部署适配: 经测试发现场馆预约接口无需校园网环境,计划将脚本迁移至 GitHub Actions 或 腾讯云 Serverless (云函数) 平台,实现零成本、免运维的云端自动抢场。
- 配置文件分离: 将用户配置从代码中分离到
config.yaml或.env文件中,避免代码中硬编码敏感信息。 - 多线程支持: 引入线程池,支持同时监控多个场馆。
- 仅供学习交流: 本项目初衷是用于学习 Python 网络爬虫与自动化测试技术,请勿用于任何商业用途。
- 遵守规则: 请使用者遵守学校相关规章制度,合理使用公共资源。
- 风险自担: 使用本工具产生的任何后果(包括但不限于账号封禁、预约失败等)由使用者自行承担,开发者不承担任何责任。