重庆工商大学(强智教务)线上抢课/捡漏脚本

发布于 2024-06-07  357 次阅读


用于重庆工商大学教务系统的抢课/捡漏脚本,操作简单便捷,能用于大部分使用强智教务系统的学校。目前已在北京邮电大学、海南大学、成都理工大学的教务系统上测试通过。由于系统版本的原因,部分使用强智教务系统的学校(如西京学院、石河子大学)不能使用本脚本。

首先需要填好需要选择的课程。有分组的课程(如体育课)只能填分组名,不能填课程名称!!!没有分组的课程直接填在课程名称一栏就行。

注意!!课程名称要跟教务系统上的名称一字不差,复制的时候不要把空格粘进去了...否则不能正常抢。如果要用这个脚本抢课的话建议在选课预览时就把配置信息填好。

然后是抢课间隔,默认500ms,抢课的时候能适当调低,捡漏的时候可以调高一点。有些学校(海南大学)抢课间隔太短会被强制踢下线(我之前10s一次都要被踢),因此只能用于碰运气捡漏,不推荐用于抢课。

有公选课(像什么尔雅网络课这种)要抢的时候一定要打开公选课开关,不然抢不到。

在showSuccessAlert函数里有个stop(),选课成功后程序会立即停止。如果要一次性抢多门课的话要删掉它。

使用方法:填好配置后复制代码,进入选课页面,F12打开浏览器控制台,回车运行。抢课成功后还会播放一段动听的音乐哦~

如果选课时出现了undefined或者一些奇怪的错误,这可能是登录失效了,需要重新登录后再进入选课页面。如果经常出现这种情况就可能是学校做了一些安全措施,试着降低一下抢课频率

附上代码:

// 课程名称,体育课勿填
let COURSES = [
    "美术鉴赏"
];

let COURSE_GROUPS = [
    "羽毛球","健美操","散打"
];

let INTERVAL_MS = 500;  //抢课间隔 默认500ms
let ENABLE_GGXXK = false;    //公选课开关

let mainInterval;
let targetCourses = [];
const start = () => {
    mainInterval = setInterval(handler, INTERVAL_MS);
    console.log("--- 开始抢课 ---");
};

const stop = () => {
    clearInterval(mainInterval);
    console.log("--- 停止抢课 ---");
};

const playSuccessSound = () => {
    let audio = new Audio('https://vthc.cn/static/end.mp3');
    audio.play();
};

const showSuccessAlert = (courseName) => {
    alert(`成功抢到课程:${courseName}`);
    console.log(`---抢课成功:${courseName}---`);
};

const logFailedAttempt = (courseName, errorMessage) => {
    console.log(`抢课失败-课程:${courseName},原因:${errorMessage}`);
};

const handler = () => {
    if (targetCourses.length === 0) {
        getCourses();
        console.log(`--- 发现 ${targetCourses.length} 个课程 ---`);
    }

    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, (response) => {
                response = JSON.parse(response)
                if (response && response.success) {
                    playSuccessSound();
                    showSuccessAlert(course.kcmc);
                } else {                                                                                                                                          
                    logFailedAttempt(course.kcmc, response.message);
                }
            });
        }
    }
};

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();

该脚本只用于学习交流,使用该脚本造成的一切后果本人概不负责!!!

PS:抢体育课这类分组的课程时添加多个课程进抢课列表可能会导致同时抢到几个课程(如体育课只需要抢一科,但会抢到两科),且退课时系统会退掉所有课程,存在一定风险,因此不建议抢课时加入多个同类课程

  • alipay_img
  • wechat_img
平芜尽处是春山
最后更新于 2024-09-07