BUPT抢课脚本使用教程

每日一言

Lend me 100 yen since I’m beautiful. – Aisa Himegami
from A Certain Magical Index

Github项目地址:helium777/bupt-course-grab: 北京邮电大学 (BUPT) 本科抢课脚本, 同时适用于其他使用强智教务系统的学校.

第一步:确认课程名称

在选课前,可以根据本专业培养方案,或者查询班级课表的方式,确认下一学期选课的具体名称,不能有一个字符的偏差,否则可能抢课失败。

1737359062551

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

1737359184845

羽毛球课程的名字为:羽毛球[男]

但是有些课程后连着班号且在同一行,如:

1737359461370

班号不用复制,课程名为:计算机网络课程设计

第二步:准备脚本

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// ----- 需要配置的参数 -----
/* 需要抢的课程名称, 必修、选修、公选通用, 需要和教务系统上的课程名称完全一致 */
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

第三步:准备抢课

在抢课前提前编辑好脚本,并复制整个脚本内容到剪贴板,在抢课开始时,进入到此界面后:

1737360185803

同时按下键盘的ctrl+shift+j

打开浏览器控制台,并将脚本复制到控制台中:

1737360479377

然后直接按键盘的回车键,脚本开始执行。

若看到这样的输出:

1737360612710

当前教学班已选择,则选课成功。

若没有抢到课也没有关系,可以调大抢课间隔,长时间的挂着持续抢课,一般可以捡漏。

关于网络

校内抢课

校内抢课建议直接连接校园网即可。

校外抢课

校外抢课建议使用atrust客户端,使用教程:北京邮电大学ATrust VPN使用指南-北京邮电大学信息化技术中心

个人感觉会比webvpn快一些。


BUPT抢课脚本使用教程
http://blog.ulna520.com/2025/01/20/BUPT-course-grab 20250120_153815/
Veröffentlicht am
January 20, 2025
Urheberrechtshinweis