BUPT抢课脚本使用教程

2379 字
6 分钟

每日一言

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

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

第一步:确认课程名称

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

1737359062551

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

1737359184845

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

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

1737359461370

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

第二步:准备脚本

代码:

// ----- 需要配置的参数 -----
/* 需要抢的课程名称, 必修、选修、公选通用, 需要和教务系统上的课程名称完全一致 */
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快一些。