每日一言
Lend me 100 yen since I’m beautiful. — Aisa Himegami from A Certain Magical Index
Github项目地址:helium777/bupt-course-grab: 北京邮电大学 (BUPT) 本科抢课脚本, 同时适用于其他使用强智教务系统的学校.
第一步:确认课程名称
在选课前,可以根据本专业培养方案,或者查询班级课表的方式,确认下一学期选课的具体名称,不能有一个字符的偏差,否则可能抢课失败。

建议直接从教务中复制课程的名字,如

羽毛球课程的名字为:羽毛球[男]
但是有些课程后连着班号且在同一行,如:

班号不用复制,课程名为:计算机网络课程设计
第二步:准备脚本
代码:
// ----- 需要配置的参数 -----
/* 需要抢的课程名称, 必修、选修、公选通用, 需要和教务系统上的课程名称完全一致 */
let COURSES = [
"面向对象程序设计实践(Java)",
"计算机网络课程设计",
"数据结构课程设计",
"智能车实践训练",
"计算机组成原理课程设计",
];
/* 需要抢的课程分组名称, 必修、选修、公选通用, 可以用于体育专项的抢课, 需要完全一致 */
let COURSE_GROUPS = [
];
/* 抢课间隔, 单位毫秒. 推荐数值: 抢课 100ms, 捡漏 500ms */
let INTERVAL_MS = 100;
/* 是否开启公选课抢课, 默认关闭, 以防止抢到课程名一样的公选课 */
let ENABLE_GGXXK = false;
// ------------------------
// 以下不需要修改
let mainInterval;
let targetCourses = [];
const start = () => {
mainInterval = setInterval(handler, INTERVAL_MS);
console.log("--- start grabbing courses ---");
};
const stop = () => {
clearInterval(mainInterval);
console.log("--- stop grabbing courses ---");
};
const handler = () => {
if (targetCourses.length === 0) {
getCourses();
}
console.log(
`--- found ${targetCourses.length} courses ---`
);
let paths = [
"/jsxsd/xsxkkc/xxxkOper", // 选修
"/jsxsd/xsxkkc/bxxkOper", // 必修
];
if (ENABLE_GGXXK) {
paths.push("/jsxsd/xsxkkc/ggxxkxkOper"); // 公选
}
for (let course of targetCourses) {
for (let path of paths) {
$.get(path, course, console.log);
}
}
};
const getCourses = () => {
let params = {
sEcho: 1,
iColumns: 11,
iDisplayStart: 0,
iDisplayLength: 999,
};
let paths = [
"/jsxsd/xsxkkc/xsxkBxxk", // 必修
"/jsxsd/xsxkkc/xsxkXxxk", // 选修
];
if (ENABLE_GGXXK) {
paths.push("/jsxsd/xsxkkc/xsxkGgxxkxk"); // 公选
}
for (let path of paths) {
$.post(path, params, (data) => {
let aaData = $.parseJSON(data).aaData;
for (let course of aaData) {
if (COURSES.includes(course.kcmc)) {
targetCourses.push(course);
} else if (COURSE_GROUPS.includes(course.fzmc)) {
targetCourses.push(course);
}
}
});
}
};
start();
将脚本中的课程名替换为你需要抢课的课程名,每两个元素中以英文符号,间隔
如果需要抢公选课请按照代码注释将对应地方的false改为true
第三步:准备抢课
在抢课前提前编辑好脚本,并复制整个脚本内容到剪贴板,在抢课开始时,进入到此界面后:

同时按下键盘的ctrl+shift+j
打开浏览器控制台,并将脚本复制到控制台中:

然后直接按键盘的回车键,脚本开始执行。
若看到这样的输出:

当前教学班已选择,则选课成功。
若没有抢到课也没有关系,可以调大抢课间隔,长时间的挂着持续抢课,一般可以捡漏。
关于网络
校内抢课
校内抢课建议直接连接校园网即可。
校外抢课
校外抢课建议使用atrust客户端,使用教程:北京邮电大学ATrust VPN使用指南-北京邮电大学信息化技术中心
个人感觉会比webvpn快一些。