Greasy Fork

Greasy Fork is available in English.

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

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

当前为 2023-08-23 提交的版本,查看 最新版本

// ==UserScript==
// @name         SYUCT沈阳化工大学教务系统助手
// @namespace    http://tampermonkey.net/
// @version      3.3
// @description  教务系统自动填写账号密码,按下回车一键自动评教,iframe框架内显示看板娘功能
// @author       Yuhang Shang
// @match        *://*.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 op = true;//true表示原神启动,false表示不启动原神

    //全局变量
    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;
        if(op){
            genshin();
        }
    }

    //添加桌宠
    //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);
    }

    //原神启动!
    function genshin(){
        //左栏图片
        var indexImg = document.querySelector('#form1 > div > div.login_left > img');
        indexImg.src = "https://i.imoe.xyz/optimizer/webp/22c19dfe47c54e7d2996c9f6be66180f";
        indexImg.style.width='120%';
        //底部版权说明
        document.querySelector('#form1 > div > div.login_copyright > span > span').textContent = '原神启动!';
        document.querySelector("#form1 > div > div.login_copyright > span > span").style.color = 'red';
        //顶部logo
        var indexLogo = document.querySelector('#form1 > div > div.login_logo > h3 > img');
        indexLogo.src = 'https://i.imoe.xyz/optimizer/raw/01H8HB35MNFC3VW8Y75BFAQMSC.png';
        //页面标题
        document.title = '原神启动!';
    }

})();