通过Chrome,Microsoft Edge游览器的DevTools实现SCUEC选课系统的自动抢课
为了减少错误,建议大家看看选课的大概原理
选课的最重要的一步是向选课系统发送特定的请求 每次点击"选课"按钮并确定后便会发送一次选课请求
发送特定的请求可以理解为访问特定的地址,如下图: 因此可通过下段JS代码实现自动抢课(courseList按照格式里更改为自己的课程)
//以下按照格式补充自己的课程
coursesList = [
{
"name": "英语国家社会与文化", //自行填写课程
"url": "http://xk.scuec.edu.cn/xsxk/xkOper.xk?method=handleTjxk&jxbid=2020-2021-220W10000151805&glJxbid=" //下文有介绍地址如何获取
},
{
"name": "学术英语阅读与写作",
"url": "http://xk.scuec.edu.cn/xsxk/xkOper.xk?method=handleTjxk&jxbid=2020-2021-220W10000101803&glJxbid="
}
]
//定义抢课函数
function rob() {
//解析课程
courses = new Array(coursesList.length)
for (let index in coursesList) {
courses[index] = {
'name' : coursesList[index].name,
'url' : coursesList[index].url,
'request' : new XMLHttpRequest(),
'robEvent': null
}
}
//注册抢课事件
for (let index in courses) {
courses.robEvent = setInterval(
function () {
courses
courses[index].request.open("GET", courses[index].url, true)
courses[index].request.send()
courses[index].request.onreadystatechange = function() {
if (courses[index].request.readyState == 4 && courses[index].request.status == 200) {
console.log(courses[index].name + courses[index].request.responseText)
if(courses[index].request.responseText.success = 'True') {
clearInterval(courses[index].robEvent); //取消抢课事件
}
}
}
},
1000 //此处为每一门选课的选课周期 4000为4s
)
}
return '开始执行抢课'
}
登陆选课之后在任意的页面按下F12打开DevTools (注意游览器关闭后需要重新登陆选课系统)
下图为效果图:
先分析一下推荐选课的请求地址,例如
http://xk.scuec.edu.cn/xsxk/xkOper.xk?method=handleTjxk&jxbid=20202021221110001461804&glJxbid=
可拆解为以下几个部分
- http:///xk.scuec.edu.cn/xsxk/xkOper.xk
- method=handleTjxk
- jxbid=20202021221110001461804
- glJxbid=
改为自己需要的 method 和 jxbid 便可拼接出需要的请求地址
下图为可能出现的 method(方法) 和 jxbid之类的参数
method | 对应选课 | 所需参数 |
---|---|---|
handleTjxk | 推荐选课 | jxbid glJxbid |
handleBfakc | 方案内选课 | jxbid glJxbid |
handleKzyxk | 方案外选课 | jxbid glJxbid |
handleCxxk | 重修选课 | jxbid glJxbid |
handleTykxk(暂未测试) | 体育选择选课 | jxbid(暂未测试) |
handleQxgxk | 通识课程选修 | jxbid glJxbid xkzy (注意:补选时不需要xkzy) |
handleCxcy | 创新创业类选课 | jxbid |
下图为出现的参数代表的意义
参数名 | 意义 | 备注 |
---|---|---|
jxbid | 教学班ID | 每个课程都有一个ID |
glJxbid | 关联教学班ID | 若非关联班则值为'空' |
xkzy | 志愿等级 | 这个应该用不上 |
适用于在选课未开始时,提前查看关联课信息
分析一下 获取关联课表格 时的请求
http://xk.scuec.edu.cn/xsxk/loadData.xk?method=getGljxb&jxbid=20202021220610003861801
- http:///xk.scuec.edu.cn/xsxk/loadData.xk
- method=getGljxb
- jxbid=20202021220610003861801
将jxbid改换后,访问地址可以获取关联班信息,如图:
重要的数据:
实际图关联课表对比
类似jxbid的获取,但一般用不上
PS:选课开始之前可以通过这个方法检验URL是否正确
希望大家能选上最想要的课
有问题欢迎来联系我