dont-track-me-google
Firefox and Chrome extensions to prevent Google from making links ugly.
正方教务系统自动抢课脚本(多省市高校实测):并发选课、课程名/课号检索、时间/教师筛选、换课、定时开抢与可视化控制台。JavaScript helper for Zhengfang course enrollment.
git clone https://github.com/ceilf6/Auto_courseGrabber.gitceilf6/Auto_courseGrabber面向正方教务系统选课页面的 JavaScript 自动选课辅助脚本。支持多课程并发选课、课程名或课号检索、时间/教师筛选、换课、定时开抢与图形化控制台。
正在搜索“正方教务系统自动选课”“正方教务系统抢课脚本”“新正方教务管理系统定时选课”?请先阅读下方的适用范围,再按三步快速启动。
有关学校覆盖与证据等级,请参阅正方高校覆盖与兼容性记录;页面加载、课程展开与换课限制请参阅使用注意
courseGrabber.js。https://bilibili.com/video/BV15q3xz5EzY/
https://www.douyin.com/video/7651581603861720441
本项目服务于使用正方教务系统的高校选课场景;不同学校的系统版本、页面定制和选课规则可能不同,因此请区分以下三种证据:
运行前请在选课页检查是否能看到课程卡片和教学班信息。当前脚本依赖正方页面中的课程卡片结构(例如 .panel-heading.kc_head 与 input[name="kch_id"]);若页面结构不同,请先提交脱敏兼容性报告,而不要直接提高请求频率。
脚本只能识别和操作已经加载到当前页面 DOM 中的课程。若目标课程还藏在页面底部的“点此查看更多”之后,或需要继续查询/翻页后才会出现,脚本无法凭课程号自动把它从未加载的数据中找出来。建议先用课程号精确搜索,并确认目标课程已经呈现在页面列表里,再启动脚本。
时间过滤器 —— 仅选择符合时间条件的教学班
星期一、星期三第1-2节、第11-12节1-8周、单周教师过滤器 —— 仅选择符合教师条件的课程
张三讲师、教授全局 / 课程级过滤器 ——
支持设置全局过滤规则,或为单门课程单独配置过滤条件,满足不同选课策略需求。
在选课过程中,页面需要完整展示课程的时间、教师等详细信息,因此过滤逻辑仅在课程信息卡片处于展开状态时才会生效。 但由于正方选课系统在使用 jQuery 刷新列表时会重建 DOM 树,已展开的课程卡片会被自动折叠。为此,本脚本在页面刷新后主动触发点击事件,自动展开目标课程卡片。
这里的“展开课程信息”不等同于页面底部的“点此查看更多”。“点此查看更多”负责把更多课程加载进当前页面;脚本不能操作尚未加载进页面的课程。“展开课程信息”只是在目标课程已经出现在页面后,展开其教学班详情。
需要注意的是,展开课程信息会带来一定的性能开销,可能对抢课请求的响应时延产生影响。因此,在以下场景下,脚本会自动将 CLICK2EXPEND_ENABLED 设置为 false,以避免不必要的展开操作:
页面中仅存在一门课程,且该课程为目标课程
(正方选课系统在刷新后会自动展开列表中的第一门课程,无需额外处理)
未启用时间过滤或教师过滤
(在无过滤目标的情况下,即使调用展开逻辑也会立即结束,但该过程仍可能引入微小延迟,从而影响抢课请求的发送频率)
登录教务系统
打开浏览器控制台
F12 或 Ctrl + Shift + ICommand + Option + I加载脚本
courseGrabber.js 的全部内容使用界面
showGrabberUI() 重新显示javascript:(function(){var script=document.createElement('script');script.src='你的脚本URL';document.body.appendChild(script);})();
方式一:使用UI界面(推荐)
星期一,第1-2节)叶利群,讲师)方式二:修改代码配置
在脚本顶部修改 TARGET_COURSES 数组:
const TARGET_COURSES = [
{
code: '23286514',
priority: 1
},
{
code: '23306047',
priority: 2,
timeFilter: ['星期一', '第1-2节'],
teacherFilter: ['叶利群', '讲师']
},
];
时间过滤器示例:
timeFilter: ['星期一', '星期三'] // 只选星期一或星期三的课 timeFilter: ['第1-2节', '第3-4节'] // 只选1-2节或3-4节的课 timeFilter: ['1-8周'] // 只选1-8周的课
教师过滤器示例:
teacherFilter: ['叶利群'] // 只选叶利群老师的课 teacherFilter: ['讲师', '教授'] // 只选讲师或教授的课 teacherFilter: ['张三', '李四'] // 只选张三或李四老师的课
编辑已添加课程的过滤器:
立即开始:
定时开抢:
命令行方式:
// 立即开始
grab.start()
// 定时开抢
grab.schedule('2025-12-19 14:00:00')
// 取消定时
grab.cancelSchedule()
// 停止抢课
grab.stop()
// 查看状态
grab.status()
// 调试信息
grab.debug()
实时监控:
状态说明:
在脚本顶部可修改以下参数:
const CHECK_INTERVAL = 2000; // 检查间隔(毫秒),默认2秒 const MAX_ATTEMPTS = 1000; // 最大尝试次数 const MAX_FAILED_ATTEMPTS = 10; // 最大连续失败次数 const CONCURRENT_ENABLED = true; // 是否启用并发抢课 const GLOBAL_TIME_FILTER = []; // 全局时间过滤器 const GLOBAL_TEACHER_FILTER = []; // 全局教师过滤器
启用并发模式 (CONCURRENT_ENABLED = true):
禁用并发模式 (CONCURRENT_ENABLED = false):
// 课程管理
grab.addCourse('23286514', 1) // 添加课程
grab.removeCourse('23286514') // 移除课程
// 状态查询
grab.status() // 查看详细状态
grab.debug() // 调试所有课程
grab.debug('23286514') // 调试指定课程
// 定时功能
grab.schedule('2025-12-19 14:00:00') // 定时开抢
grab.cancelSchedule() // 取消定时
// 配置管理
grab.config.getCourses() // 获取课程列表
grab.config.showFilters() // 查看过滤器配置
grab.config.getInterval() // 获取检查间隔
grab.config.getConcurrentMode() // 获取并发模式状态
Q: 脚本运行后找不到教学班? A: 请先确认目标课程已经加载到当前页面列表中。推荐使用课程号精确搜索;如果目标课程仍在“点此查看更多”之后,脚本无法找到。目标课程出现后,脚本会按需自动展开课程详情以读取教学班信息。
Q: 提示时间冲突怎么办? A: 脚本会自动尝试其他教学班,如果所有教学班都冲突会自动停止。
Q: 如何调整检查速度?
A: 修改 CHECK_INTERVAL 参数,但不建议设置太小以免给服务器造成压力。
Q: 界面不见了怎么办?
A: 在控制台输入 showGrabberUI() 即可重新显示。
Q: 如何同时抢多个时间段的课? A: 不设置时间过滤器,或在时间过滤器中添加多个时间段。
Q: 上海大学、浙江大学、上海交通大学、杭州电子科技大学可以使用吗?
A: 请以高校覆盖记录中的证据等级为准。学校使用正方产品或出现在正方官网客户列表中,并不自动表示本脚本兼容;请在自主选课页面按上文的页面特征检查,并优先使用本项目的实测记录。
Q: 新正方教务管理系统可以定时选课吗?
A: 可以设置定时开抢;但须在选课开放前登录,并保持目标课程出现在页面中。不同学校对开放时间、选课规则和请求频率的要求不同,请遵守本校规定。
Q: 正方教务系统如何按教师或上课时间筛选选课?
A: 添加课程时填写教师或时间过滤条件即可。时间支持星期、节次和周数关键词;教师筛选支持姓名或职称。详见过滤器示例。
Q: 如何反馈某学校是否兼容?
A: 请通过兼容性报告提交学校、系统版本或非敏感页面特征、脚本版本、测试日期与结果;不要提交账号、密码、Cookie、Token、学号或私有系统链接。
Auto_courseGrabber/
├── courseGrabber.js # 主脚本文件
├── README.md # 说明文档
└── web结构/ # 网页结构参考
├── 自主选课.html
├── DOM.html
└── 自主选课_files/
├── zzxkYzb.js
├── index.js
└── ...
欢迎提交 Issue 和 Pull Request!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)本项目采用 MIT 许可证 - 详见 LICENSE 文件
本脚本仅供学习交流使用,使用者需遵守学校相关规定。因使用本脚本产生的任何问题,作者不承担任何责任。请合理使用,不要给服务器造成过大压力。
如果这个项目对你有帮助,欢迎 ⭐ Star 支持;也欢迎提交一份脱敏的兼容性报告,帮助其他使用正方教务系统的同学更快确认适用性。
祝你抢课成功!🎉
more like this
Firefox and Chrome extensions to prevent Google from making links ugly.
A to-do list that runs your Claude Code agents — capture anywhere, dispatch in parallel, review from your phone.
Arduino library and MATLAB/Simulink API for the AutomationShield Arduino expansion boards for control engineering educa…
search projects, people, and tags