国科大抢课刷课程序

    国科大最坑爹的就是选课了,公选基本都是限人数,部分专业课也是有人数限制。等你打开教务选课,那些课早就没了。我特别写了这几个抢课JS,如果你能搜到我的博客并且你是国科大的,那么希望能帮到你。使用文档如下:

务必使用谷歌或者火狐浏览器,这里以火狐为例

方案一 自动抢课版

    缺点,教务系统一旦崩溃,这代码估计也得崩了,由于是两秒一刷新,那么有可能会延误几秒,保险率80%。

    优点,选课的整个流程都会自动,如果成功进入了选课页面,即使页面错误,也会继续刷新,直到成功提交。

第一步。请先确认自己选课在时间上是不冲突的。

第二步。记下自己的课程编号和课程所在的学院。

第三步。我们要改一下方案一.txt中的源代码。方案一中有两个数组,如下

var courseArr = [

'712064H',

'888888H'//这里没有逗号

];

var collegeArr = [0, 2, 7, 12, 14];

第一个填课程编号,按照样子换成自己要选的课。每个编号用单引号括起来,之间用逗号隔开,末尾没有逗号。

第二个填学院编号,学院编号如下

0-人文学院

1-外语系

2-数学科学学院

3-物理学院

4-化学与化工学院

5-生命科学学院

6-地球科学学院

7-计算机与控制学院

8-资源与环境学院

9-管理学院

10-体育教研室

11-电子电气与通信工程学院

12-工程管理与信息技术学院

13-材料科学与光电学院

14-科技管理学院

注意事项:务必使用英文的引号和逗号,务必没有语法错误

 

第四步。登陆国科大选课系统,点击选择课程,到如下页面。

[[BP`_`0WS085`Y29F7IIL9.jpg 

第五步。按F12键,出现一个调试器。选择控制台一项,如下

2NUQ50W126F]TA])[Y4HN6U.jpg 

第六步。最下方处有一窄条输入框,将方案一中代码复制进去,回车。如果上面出先了黄色字 “refresh 1234354235”说明操作正确。

注意事项:如果开始刷新之后,第四步中图片显示的页面的右半部分出现的是错误页,那么再次单击一下左面的选择课程,这个BUG可以通过每次都强制设置一次iframe的src来修复。


方案二 一次手速版

缺点,人工手速不够的话,基本没戏。

第一步。修改方案二.txt 中的源码,修改方式相同,只是方案二米有第二个数组。

第二步。等选课时间到了,自己选择学院,点击选课按钮,进入课程页面(就那个找课程,打勾,然后提交的页面)

第三步。等待页面显示的差不多了。按F12打开调试器。在输入框中复制进方案一的代码,回车。代码会立刻帮忙提交选课。

 

方案三 后续无限刷课补救版

步骤同方案二,只是代码换成方案三.txt

然后就一直刷,前提是电脑不断网(哭,能不断网么)。


方案一.txt代码

var frame = window.parent.frames.MainFrame;
var start = false;
var courseArr = [
'712064H',
'888888H'//这里没有逗号
];
var collegeArr = [0, 2, 7, 12, 14];

var cMap = {};
for (var i = collegeArr.length - 1; i >= 0; i--) {
    cMap[collegeArr[i]] = 1;
}
var intId = setInterval(function () {
    console.log('refresh  ' + (+new Date()));
    var btn = frame.document.getElementById('AddCourseBtn');
    if (!btn.disabled) {
        var college = frame.document.getElementsByTagName('input');
        for (var i = college.length - 1; i >= 0; i--) {
            var cid = college[i].id
            if (!cid) continue;
            cid = cid.split('_')[1];
            if (cMap[cid]) {
                college[i].disabled = '';
                college[i].checked = true;
            }
        }
        clearInterval(intId);
        btn.click();
        setTimeout(function () {
            start = true;
        }, 2000);
    } else {
        frame.location.reload();
    }
}, 5000);

var intId1 = setInterval(function () {
    if (!start) return;
    console.log('refresh  ' + (+new Date()));
    var frame = window.parent.frames.MainFrame;
    var hasCheck = false;
    for (var i = courseArr.length - 1; i >= 0; i--) {
        var course = null;
        var sel = frame.document.getElementsByTagName('a');
        for (var j = sel.length - 1; j >= 0; j--) {
            if (sel[j].innerHTML == courseArr[i]) {
                course = sel[j].parentNode.parentNode.getElementsByTagName('input')[0];
            }
        }
        if (course && !course.disabled) {
            course.checked = true;
            hasCheck = true;
        }
    }
    if (hasCheck) {
        frame.document.getElementById('SureBtn').click();
        clearInterval(intId1);
    }
}, 2000);

方案二.txt

//一次手速版
var courseArr = [
'712064H',
'888888H'//这里没有逗号
];
var frame = window.parent.frames.MainFrame;
var hasCheck = false;
for (var i = courseArr.length - 1; i >= 0; i--) {
    var course = null;
    var sel = frame.document.getElementsByTagName('a');
    for (var j = sel.length - 1; j >= 0; j--) {
        if (sel[j].innerHTML == courseArr[i]) {
            course = sel[j].parentNode.parentNode.getElementsByTagName('input')[0];
        }
    }
    if (course && !course.disabled) {
        course.checked = true;
        hasCheck = true;
    }
}
frame.document.getElementById('SureBtn').disabled = '';
frame.document.getElementById('SureBtn').click();

方案三.txt

///无限刷课版
var courseArr = [
'712064H',
'888888H'
];
var intId = setInterval(function () {
    var frame = window.parent.frames.MainFrame;
    frame.location.reload();
    var hasCheck = false;
    for (var i = courseArr.length - 1; i >= 0; i--) {
        var course = null;
        var sel = frame.document.getElementsByTagName('a');
        for (var j = sel.length - 1; j >= 0; j--) {
            if (sel[j].innerHTML == courseArr[i]) {
                course = sel[j].parentNode.parentNode.getElementsByTagName('input')[0];
            }
        }
        if (course && !course.disabled) {
            course.checked = true;
            hasCheck = true;
        }
    }
    if (hasCheck) {
        frame.document.getElementById('SureBtn').click();
        clearInterval(intId);
    }
}, 5000);


留言: