程序地带

HZAU新版正方教务系统一键教学评价


新的一轮教学评价又开始了,每门课要点十几次,课程多的话可能得点一两百次,想起去年有大佬做过自动评价的脚本,但不能用了,因为教务系统的代码有更改,而且不能全满分了,所以照着大佬的代码摸索了一下,改出了能用的脚本。不懂代码的话可以看第一部分直接上手用,懂一点代码而且有兴趣的话可以看一下第二部分,了解一下如何做这样的脚本。


一、授人以鱼

以下以360浏览器为例,其它浏览器大同小异。


1.首先打开教务系统,进入到学生评价页面,如下图。如果课多的话,改一下每页显示的课程数,尽量一个页面显示完所有课。



2.按F12进入开发者模式(笔记本可能需要按fn+F12),或者右键-审查元素也可以进入开发者模式



3.切换到第二项console(有的浏览器译为终端),如下图的1



4.复制下面的代码,粘贴到上一步的console下面的输入区域(即上图的2),然后回车即可一键评价


var num = document.getElementById("tempGrid").rows.length-1
console.log('共'+num+'门课')
var i=1;
var timer = setInterval(() => {
if(i == num+1) {
console.log('评价结束')
clearInterval(timer)
}else{
console.log('开始评第'+i+'门课')
var body = document.getElementById(i++)
if(body!=null) body.click();
setTimeout(() => {
var radios = document.getElementsByClassName('radio-pjf');
var j=0;
var r=Math.floor(Math.random()*5)+3;
[...radios].forEach((item) => {
if(r==j){
if(item.getAttribute("data-dyf")=="4") {
item.checked = true
j++
}
}else{
if(item.getAttribute("data-dyf")=="5") {
item.checked = true
j++
}
}
})
document.getElementById('btn_xspj_bc').click()
document.getElementById('btn_xspj_tj').click()
console.log('第'+(i-1)+'门课已提交')
},3000)
}
},6000)
二、授人以渔

这部分我分享一下我是如何做出这个脚本的,以后如果我的代码失效的话,大家可以知道怎么改。


1.首先,我们知道,对获取到的html元素调用click()方法可以模拟一次点击,所以我们首先需要获取到左侧课程的HTML元素。



2.通过分析这个页面的HTML源码,我发现在源码里,每门课都有一个id,而且id是从1开始的,所以我们可以使用document.getElementById(id)这个方法获取到每门课的HTML元素



3.在点击了左侧的课程之后,右侧出现了评分表,还是通过分析代码,评分表的classname是radio-pjf,通过document.getElementsByClassName('radio-pjf');可以获得评分表的HTML对象。。我们需要选10个5分和1个4分,评分项中教学过程权重较低,我们可以把4分选在这里,通过一个随机数来实现(这部分是参考别人的代码)


 


var radios = document.getElementsByClassName('radio-pjf');
var j=0;
var r=Math.floor(Math.random()*5)+3;
[...radios].forEach((item) => {
if(r==j){
if(item.getAttribute("data-dyf")=="4") {
item.checked = true
j++
}
}else{
if(item.getAttribute("data-dyf")=="5") {
item.checked = true
j++
}
}
})

5.把分数选完之后,我们需要保存提交,分析一下源码,找到【保存】和【提交】这两个按钮的代码,发现它们的id分别是btn_xspj_bc、btn_xspj_tj,使用document.getElementById()获取元素并点击即可


document.getElementById('btn_xspj_bc').click()
document.getElementById('btn_xspj_tj').click()

 


结语

主要是需要分析一下源码,知道如何获取HTML元素,如果以后教务系统的代码和规则有更改的话,稍微改一下我的代码应该就能用了。不过奇怪的是,不可以通过获取左侧课程的时候不能通过for循环var body = document.getElementById(i++)来获取相应课程,学艺不精不知道是为什么,这里是参考大佬的代码。


参考

https://mubu.com/doc/faqLPTsU50


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42312546/article/details/111246233

随机推荐

DRF排序

排序对于列表数据,RESTframework提供了OrderingFilter过滤器来帮助我们快速指明数据按照指定字段进行排序。使用方法:在类视图中设置filter_bac...

.明天的自己 阅读(397)

java基础之运算符(Operator)

运算符1算数运算符1.1运算符两侧的类型一致1.2运算两侧的类型不一致1.3++,--运算符1.4+字符串中的拼接操作2赋值运算符1)赋值运算符=2&#x...

鞋子不会飞 阅读(667)

SNAT和DNAT的区别

从定义来讲它们一个是源地址转换,一个是目标地址转换。都是地址转换的功能,将私有地址转换为公网地址。要区分这两个功能可以简单的由连接发起者是谁来区分:SNAT:...

chunmiao3032 阅读(617)

SHELL编程

管道和重定向1.重定向输出>如果文件已存在,它的内容将被覆盖。>>输出会附加到文件的末尾。$kill-HUP1234>kellout.txt2>killer...

韵冰 阅读(527)

Manjaro 安装与使用 Anaconda

Manjaro安装与使用Anaconda28Feb2019安装yaourtanacondasource/opt/anaconda/bin/activeroot添加环境变量在~/.bashrc中添加ex...

韵冰 阅读(124)

TP商城自动化测试

fromseleniumimportwebdriverfromtimeimportsleepbrower=webdriver.Chrome()brower.get(url='h...

行走的小刘 阅读(939)

打印杨辉三角

打印杨辉三角本题要求按照规定格式打印前N行杨辉三角。输入格式:输入在一行中给出N(1≤N≤10)。输出格式:以正三角形的格式输出前N行杨辉三角。...

程翠敏 阅读(433)