健康打卡自动化

每日健康打卡自动化

// ==UserScript==
// @name         dailyReport Automator
// @name:zh      健康打卡自动化
// @name:zh-CN   健康打卡自动化
// @namespace    http://stu3.zstu.edu.cn/webroot/decision
// @version      0.04
// @description  Automatically completes the health daily report
// @description:zh-cn 每日健康打卡自动化
// @author       Chaos4Yarn
// @match        http://stu3.zstu.edu.cn/webroot/decision/*
// @match        http://stu3.zstu.edu.cn/webroot/decision
// @grant        none
// ==/UserScript==

//======================CONFIG======================
// Credentials for auto-login
    var username = "username";
    var password = "password";
//==================================================

    function $(id){
        return document.getElementById(id);
    }
    function $$(classname){
        return document.getElementsByClassName(classname);
    }
    function $$$(name){
        return document.getElementsByName(name);
    }


(function() {
    'use strict';
    window.onload = function() {
        if(username=="username"){
            // username check
            alert("Please edit the script and set your username & password! \n请编辑脚本,指定你的用户名和密码!");
            alert("The script will now terminate. \n脚本执行中断。");
            return false;
        }
        if(window.location.pathname === "/webroot/decision/login"){
            // 账号密码
            $$("bi-input")[0].value = username;
            $$("bi-input")[1].value = password;
            // 登录按钮点击
            var clickevt = document.createEvent("MouseEvents");
            clickevt.initEvent("click", true, true);
            $$("login-button")[0].dispatchEvent(clickevt);

        } else {
            // 打开 健康申报标签栏
            var open = document.createEvent("Event");
            open.initEvent("click", true, true);
            $$("bi-expander")[0].dispatchEvent(open);
            setTimeout(function() {
                $$("dec-frame-platform-list-item-active")[0].dispatchEvent(open);
            }, 0);
            // 定时器,加载完毕,打开健康申报页面
            var timer;
            timer = setInterval(function() {
                if ($$("bi-iframe bi-card")[1].contentWindow.document.getElementsByClassName("linkspan").length) {
                    // 避免重复打卡
                    var node = $$("bi-iframe bi-card")[1].contentWindow.document.getElementsByClassName("linkspan")[0]
                    if (node.parentNode.parentNode.style.display === "none") {
                        alert("今日已打卡");
                        clearInterval(timer);
                        return
                    }
                    node.dispatchEvent(open);
                    clearInterval(timer);
                    // 自动填充数据
                    var timer2;
                    timer2 = setInterval(function() {
                        var el = dataFormat("x-text");
                        if (el.length) {
                            clearInterval(timer2);
                            // 自动填充数据
                            autoFillData();
                        }
                    },500)
                }
            },500)
            function dataFormat(className) {
                return $$("bi-iframe bi-card")[1].contentWindow.document.getElementsByClassName(className);
            }
            function tdDataFormat(id) {
                return $$("bi-iframe bi-card")[1].contentWindow.document.getElementById(id);
            }
            // 自动填充数据
            function autoFillData() {
                // 省市区
                dataFormat("fr-trigger-texteditor")[0].value = "浙江省"
                tdDataFormat("D9-0-0").setAttribute("cv", "浙江省")
                dataFormat("fr-trigger-texteditor")[1].value = "杭州市"
                tdDataFormat("E9-0-0").setAttribute("cv", "杭州市")
                dataFormat("fr-trigger-texteditor")[2].value = "江干区"
                tdDataFormat("F9-0-0").setAttribute("cv", "江干区")
                dataFormat("fr-texteditor")[0].value = "浙江理工大学"
                tdDataFormat("D10-0-0").setAttribute("cv", "浙江理工大学")
                // radio
                // 是否离校 0:是,1:否
                // dataFormat("x-text")[1].classList.remove("fr-radio-radiooff")
                // dataFormat("x-text")[1].classList.add("fr-radio-radioon")
                // 身体状况 2:正常,3:不是
                dataFormat("x-text")[2].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[2].classList.add("fr-radio-radioon")
                tdDataFormat("D18-0-0").setAttribute("cv", "正常")
                // 今日上午测量体温 8:37度以下,9:37-37.2度,10:37.3度以上
                dataFormat("x-text")[8].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[8].classList.add("fr-radio-radioon")
                tdDataFormat("D20-0-0").setAttribute("cv", "37度以下")
                // 昨日下午测量体温 11:37度以下,12:37-37.2度,13:37.3度以上
                dataFormat("x-text")[11].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[11].classList.add("fr-radio-radioon")
                tdDataFormat("D21-0-0").setAttribute("cv", "37度以下")
                // 是否接种新冠疫苗 21:是 全部,22:是 第一次,23:否
                // dataFormat("x-text")[23].classList.remove("fr-radio-radiooff")
                // dataFormat("x-text")[23].classList.add("fr-radio-radioon")
                // 1.杭州健康码 24:绿色
                dataFormat("x-text")[24].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[24].classList.add("fr-radio-radioon")
                tdDataFormat("F28-0-0").setAttribute("cv", "绿色")
                // 2.通信大数据行程卡 29:绿色
                dataFormat("x-text")[29].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[29].classList.add("fr-radio-radioon")
                tdDataFormat("F29-0-0").setAttribute("cv", "绿色")
                // 3.是否属于近28日内境返回人员 34:是,35:否
                dataFormat("x-text")[35].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[35].classList.add("fr-radio-radioon")
                tdDataFormat("F30-0-0").setAttribute("cv", "否")
                // 4.学生及同住家庭成员是否存在确诊/疑似病例 36:是,37:否
                dataFormat("x-text")[37].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[37].classList.add("fr-radio-radioon")
                tdDataFormat("F31-0-0").setAttribute("cv", "否")
                // 5.学生及同住家庭成员:近14天是否到过中高风险地区 38:是,39:否
                dataFormat("x-text")[39].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[39].classList.add("fr-radio-radioon")
                tdDataFormat("F32-0-0").setAttribute("cv", "否")
                // 6.学生及同住家庭成员:近十四天是否接触中高风险地区返回人员 40:是,41:否
                dataFormat("x-text")[41].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[41].classList.add("fr-radio-radioon")
                tdDataFormat("F34-0-0").setAttribute("cv", "否")
                // 7.近14天内是否做过核酸检测 42:否,43:阴性,44:阳性
                dataFormat("x-text")[42].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[42].classList.add("fr-radio-radioon")
                tdDataFormat("F36-0-0").setAttribute("cv", "否")
                // 家人/同住人员是否有出现发热、干咳等症状 45:是,46:否
                dataFormat("x-text")[46].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[46].classList.add("fr-radio-radioon")
                tdDataFormat("F38-0-0").setAttribute("cv", "否")
                // 是否曾离开所居住城市 47:是,48:否
                dataFormat("x-text")[48].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[48].classList.add("fr-radio-radioon")
                tdDataFormat("F40-0-0").setAttribute("cv", "否")
                // 是否属于近14天内从福建省厦门市、泉州市、莆田市、晋江市,哈尔滨市返回? 49:是,50:否
                dataFormat("x-text")[50].classList.remove("fr-radio-radiooff")
                dataFormat("x-text")[50].classList.add("fr-radio-radioon")
                tdDataFormat("F42-0-0").setAttribute("cv", "否")
                // 提交数据(自动,可选择打开)
                var submit = document.createEvent("Event");
                submit.initEvent("click", true, true);
                dataFormat("fr-btn-up  fr-btn-noicon")[0].dispatchEvent(submit);
            }
        }
    }
})();