Greasy Fork

Greasy Fork is available in English.

SYUCT沈阳化工大学教务系统助手

教务系统自动填写账号密码,按下回车一键自动评教,iframe框架内显示看板娘功能

当前为 2023-03-25 提交的版本,查看 最新版本

// ==UserScript==
// @name         SYUCT沈阳化工大学教务系统助手
// @namespace    http://tampermonkey.net/
// @version      3.1
// @description  教务系统自动填写账号密码,按下回车一键自动评教,iframe框架内显示看板娘功能
// @author       Yuhang Shang
// @match        *://jws.syuct.edu.cn/*
// @icon         https://www.shangyuhang.icu/favicon/64_64.ico
// @grant        none
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    //使用帮助
    //在使用脚本按键前:请先点击评教页面表格任意位置,使脚本能够获取焦点
    //按下回车键自动填写教师评价(随机一行是良好,其余行均为优秀)

    //=======================================
    //    请在此填写您的账号和密码
    //=======================================
    var your_username='你的账号';
    var your_password='你的密码';

    //全局变量
    var StudentLoginURL='default2.aspx';//学生登录页面url
    var iiframe;//用来获取内部iframe框架的变量
    var girl_link;//存储引入桌宠项目所需添加的link元素
    var girl_script;//存储引入桌宠项目所需添加的script元素
    var randNum;//随机数

    //键盘监听事件
    document.addEventListener('keydown', my);
    function my(e){
        if(e.keyCode==13){
            write();
        }
    }

    //自动评价功能
    function write(){
        //此时我默认前两列是大写,后面的列数都为小写,如果有4列以上的评教结构且非此规则的话,请告知我
        //查找有多少行
        let rows=document.querySelector('#DataGrid1').rows.length-1;
        //查找有多少列(减去前三列非填写项,2列大写情况)
        let colums = document.querySelector('#DataGrid1').rows[0].cells.length-3;
        //判断是单列评教还是多列评教
        if(colums == 1){
            singleWrite(rows,colums);
        }
        else{
            binaryWrite(rows,colums);
        }

        //随机一行为良好的备用代码
        //var final=document.getElementById('DataGrid1__ctl2_JS1');
        //final.value='良好';
        //点击保存按钮
        document.querySelector('#Button1').click();
    }

    //多列评教
    //二重循环遍历行列
    //要两次遍历,因为学校系统很愚蠢的第三列第四列又变为小写规则编号命名,我不理解
    function binaryWrite(rows,colums){
        //第一次遍历行列,大写形式
        for(let j=1;j<=2;j++){
            //先将所有行全填为优秀
            for(let i=0;i<rows;i++){
                let my_selector='#DataGrid1__ctl'+(i+2)+'_JS'+j;
                document.querySelector(my_selector).value='优秀';
                //console.log(my_selector);
            }
            //再随机一行填为良好
            randNum=randomNum(2,1+rows);
            let my_selector2='#DataGrid1__ctl'+randNum+'_JS'+j;
            document.querySelector(my_selector2).value='良好';
        }
        //第二次遍历行列,小写形式
        for(let j=3;j<=colums;j++){
            //先将所有行全填为优秀
            for(let i=0;i<rows;i++){
                let my_selector='#DataGrid1__ctl'+(i+2)+'_js'+j;
                document.querySelector(my_selector).value='优秀';
            }
            //再随机一行填为良好
            randNum=randomNum(2,1+rows);
            let my_selector2='#DataGrid1__ctl'+randNum+'_js'+j;
            document.querySelector(my_selector2).value='良好';
        }
    }

    //单列评教
    function singleWrite(rows,colums) {
        //先将所有行全填为优秀
        for(let i=0;i<rows;i++){
            let my_selector='#DataGrid1__ctl'+(i+2)+'_JS1';
            document.querySelector(my_selector).value='优秀';
            //console.log(my_selector);
        }
        //再随机一行填为良好
        randNum=randomNum(2,1+rows);
        let my_selector2='#DataGrid1__ctl'+randNum+'_JS1';
        document.querySelector(my_selector2).value='良好';
    }

    //随机函数,返回一个介于minNum和maxNum之间的值(包括两端边界)
     function randomNum(minNum,maxNum){
        switch(arguments.length){
            case 1:
                return parseInt(Math.random()*minNum+1,10);break;
            case 2:
                return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);break;
            default:
                return 0;break;
        }
    }

    //学生登录系统
    var windowURL = window.location.href;
    if (windowURL.indexOf(StudentLoginURL) != -1) {
        createGirl();
        document.querySelector('#txtUserName').value=your_username;
        document.querySelector('#TextBox2').value=your_password;
    }

    //添加看板娘
    //createGirl();
    //window.onload=function {setTimeout(deleteGirl(),5000);}

    //判断是否有iframe框架
    if(iiframe = document.getElementById('iframeautoheight'))
    {
        //等待内部框架加载完毕再生成看板娘
        iiframe.onload=function(){
            //获取iframe窗口句柄
            iiframe = document.getElementById('iframeautoheight').contentWindow;
            //添加link元素
            girl_link = iiframe.document.createElement('link');
            girl_link.setAttribute('hreflang','zh');
            girl_link.setAttribute('rel','stylesheet');
            girl_link.setAttribute('href','https://cdn.jsdelivr.net/npm/font-awesome/css/font-awesome.min.css');
            girl_link.setAttribute('id','girl_link');
            iiframe.document.head.appendChild(girl_link);
            //添加script元素
            girl_script=iiframe.document.createElement('script');
            girl_script.setAttribute('src','https://cdn.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/autoload.js');
            girl_script.setAttribute('id','girl_script');
            iiframe.document.head.appendChild(girl_script);}

    }

    //在内嵌iframe页面删除看板娘
    function deleteGirl(){
        window.alert('delete');
        iiframe = document.getElementById('#iframeautoheight').contentWindow;
        iiframe.document.querySelector('#live2d').remove();
    }

    //左下角添加看板娘(全局作用,慎用)
    function createGirl(){
        var girl_link = document.createElement('link');
        girl_link.setAttribute('hreflang','zh');
        girl_link.setAttribute('rel','stylesheet');
        girl_link.setAttribute('href','https://cdn.jsdelivr.net/npm/font-awesome/css/font-awesome.min.css');
        document.head.appendChild(girl_link);
        var girl_script=document.createElement('script');
        girl_script.setAttribute('src','https://cdn.jsdelivr.net/gh/stevenjoezhang/live2d-widget@latest/autoload.js');
        document.head.appendChild(girl_script);
    }

})();

//抢课卡进服务器专用

    //公选课按钮
    //var button2=document.querySelector("#headDiv > ul > li:nth-child(2) > ul > li:nth-child(3) > a");
    //button2.click;
    //var aaaa=document.querySelector("#headDiv > ul > li:nth-child(2) > a > span")
    //(aaaa.textContent='网上选课'){
        //体育课按钮
     //   var button1=document.querySelector("#headDiv > ul > li:nth-child(2) > ul > li:nth-child(2) > a");
    //    button1.click();

   // }
    //else{
    //    location.reload();
   // }
   // GetMc('选体育课');