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

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

 

一、授人以鱼

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

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

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

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

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

Object.defineProperty(navigator, 'userAgent', {value: 'Android',writable: false});
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++)来获取相应课程,学艺不精不知道是为什么,这里是参考大佬的代码。

参考

无标题 - 幕布

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值