Greasy Fork

Greasy Fork is available in English.

若离智慧校园

若离智慧校园,解决宜宾学院智慧校园的题目,能够自动获取宜宾学院的智慧校园的作业的答案,前提是你做了一遍后可以看到自己做过的答案

当前为 2021-05-17 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         若离智慧校园
// @namespace    若离智慧校园,解决宜宾学院智慧校园的题目,能够自动获取宜宾学院的智慧校园的作业的答案,前提是你做了一遍后可以看到自己做过的答案
// @version      1.0
// @description  若离智慧校园,解决宜宾学院智慧校园的题目,能够自动获取宜宾学院的智慧校园的作业的答案,前提是你做了一遍后可以看到自己做过的答案
// @author       若离QQ:2909998156
// @match        http://mooc.yibinu.edu.cn/examTest/*
// @icon         https://q1.qlogo.cn/g?b=qq&nk=2909998156&s=100
// @resource cs1 https://unpkg.com/element-ui/lib/theme-chalk/index.css
// @resource cs2 https://pan.ruoli.cc/E5/cdn/ruoli.min.css
// @require      https://cdn.jsdelivr.net/npm/vue/dist/vue.js
// @require      https://unpkg.com/element-ui/lib/index.js
// @require      https://cdn.bootcdn.net/ajax/libs/limonte-sweetalert2/10.16.3/sweetalert2.all.js
// @run-at       document-end
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @grant        GM_getResourceText
// ==/UserScript==


// 从后台获取答案
function getAnswer(url, data){
    console.log('获取答案中');
    GM_xmlhttpRequest({
        method: "post",
        url: url,
        data: data,
        dataType: 'json',
        headers: {
            'Origin': location.origin,
            'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
            'Content-type': 'application/x-www-form-urlencoded;charset=utf-8',
        },
        onload: function(res){
            console.log(res);
            if(res .status == 200){
                var obj = $.parseJSON(res.responseText).paper.paperStruct;
                setting.logs.unshift("获取答案完成,正在格式化答案!");
                setTimeout(formatAnswer, 2000, obj);
            }else{

            }
        }
    });
}
//格式化答案
function formatAnswer(str){
    str.forEach((listItem,index) => {
        //遍历出问题
        var question = listItem.quiz.quizContent;
        //如果存在选项,那么必定是单选或者多选,先将选项便利出来
        var options = []; //定义选项的数组
        var answer = []; //定义答案的数组
        if(listItem.quiz.quizOptionses.length != 0){
            //console.log(listItem);
            //将遍历出来的选项添加到选项数组
            listItem.quiz.quizOptionses.forEach((optionItem, index) =>{
                options[optionItem.optionId] = String.fromCharCode(65+index) + ":" +optionItem.optionContent;
            })
            //将遍历出来的答案添加到答案数组
            listItem.quiz.quizResponses.forEach(answerItem =>{
                answer.push(options[answerItem.optionId]);
            })
        }else{//不存在选项,也就是填空题
            listItem.quiz.quizResponses.forEach(answerItem =>{
                //console.log('填空题');
                answer.push(answerItem.responseContent);
            })
        }
        setting.datas.push({'id':index + 1 ,'question':question, 'answer': answer});
    })
    setting.logs.unshift('答案获取完成,感谢您的使用');
    setting.logs.unshift('若您觉得本脚不错,记得赞助哦');
    setting.logs.unshift('官方交流群:183937365欢迎大家加入!');
}
//初始化界面
function initView(){
    var $div =$('<div id="rlBox"> ' +
		'	<el-card class="box-card"> ' +
		'		<el-row> ' +
		'		  <el-col :span="24"><div class="center"><b style="color: #E6A23C; font-size: 20px;">若离智慧校园</b></div></el-col> ' +
		'		</el-row> ' +
		'		<el-divider></el-divider> ' +
		'		<el-row> ' +
		'			<a href ="https://pay.ruoli.cc/" target="_blank"><el-button type="primary" plain size="mini">我要赞助</el-button></a> ' +
		'			<a href ="https://jq.qq.com/?_wv=1027&k=OPpSeMCZ" target="_blank"><el-button type="success" plain size="mini">加入群聊</el-button></a>' +
		'		</el-row> ' +
		'		<el-divider></el-divider> ' +
		'		<el-row class = "log_list"> ' +
		'			<el-col :span="3"><span class="gray small">日志</span></el-col> ' +
		'			<el-col :span="21"> ' +
		'				<el-row class = "log_list"> ' +
		'					<el-col :span="24"> ' +
		'						<div class="gray small" v-for="log in logs">{{ log }}</div> ' +
		'					</el-col> ' +
		'				</el-row> ' +
		'			</el-col> ' +
		'		</el-row> ' +
		'		<el-divider></el-divider> ' +
		'	  <template> ' +
		'	    <el-table ' +
		'	      :data="tableData" ' +
		'	      border ' +
        '	      empty-Text = "欢迎大家加入群聊:183937365"' +
		'		  size="mini" ' +
		'	      style="width: 100%"> ' +
		'	      <el-table-column ' +
		'	        prop="id" ' +
		'	        label="题号" ' +
		'	        width="48" ' +
		'			align="center"> ' +
		'	      </el-table-column> ' +
		'	      <el-table-column ' +
        '           :show-overflow-tooltip="true"' +
		'	        prop="question" ' +
		'	        label="题目" ' +
		'	        width="120"> ' +
		'	      </el-table-column> ' +
		'	      <el-table-column ' +
		'	        prop="answer" ' +
		'	        label="答案" >' +
        //'           v-for="(item,i) in answer" :key="i">' +
        //'           <template slot-scope="scope">' +
        //'           <p>答案是:{{ scope.row[i] }}</p>' +
        //'            </template>' +
		'	      </el-table-column> ' +
		'	    </el-table> ' +
		'	  </template> ' +
		'	</el-card> ' +
        '</div> ');
    $("body").append($div);
    GM_addStyle(GM_getResourceText("cs1"));
    GM_addStyle(GM_getResourceText("cs2"));
    var vue = new Vue({
			el: '#rlBox',
			data:{
				logs: setting.logs,
				tableData: setting.datas,
                dialogVisible: true
			},
        	methods: {
                handleClose(done) {
                    this.$confirm('确认关闭?')
                        .then(_ => {
                        done();
                    })
                        .catch(_ => {});
                }
       		},

		});
}





// 初始化获取答案,延迟5秒防止流程崩溃
function initGetAnswer(settings){
    var url = location.origin + settings.url;
    var data = settings.data.replace(/(testPaperId=).*?(&)/,'$1' + '1250' + '$2');
    getAnswer(url,data);
}



//脚本初始化
var setting = {'logs':['初始化脚本完成,若离QQ:2909998156'],'datas': []};



//判断是否已经同意了本脚本的协议
function checkStatus(){
    var status = localStorage.getItem('ruoli');
    if(status == "true"){
        initView();
        //监听url访问,当访问了加载题目的url时,将获取答案
        $(document).ready(function(){
            $(document).ajaxComplete(function (evt, request, settings) {
                if(settings.url.search('getExamPaper') != -1){
                    setting.logs.unshift("您已打开作业界面,5秒后将为您获取答案")
                    setTimeout(initGetAnswer,5000, settings);
                }
            });
        })
    }else{
        swal.fire({
            icon: 'warning',
            title: '若离提示',
            html: '在您使用本脚本之前,请先确保您<strong>不会以此牟利</strong><br />并且您下载本脚本仅仅用于学习<br/>不会借助于本脚本来做任何违反法律<br/>以及学校规章制度的事情!',
            showCancelButton: true,
            confirmButtonColor: '#409EFF',
            cancelButtonColor: '#d33',
            confirmButtonText: '我 同 意',
            cancelButtonText: '我 拒 绝',
        }).then((result) => {
            if (result.isConfirmed) {
                swal.fire({
                    text: '感谢您的支持,如果您觉得本脚本不错,可以加群讨论哦!',
                    icon: 'success',
                    confirmButtonColor: '#409EFF',
                });
                localStorage.setItem('ruoli',true);
                checkStatus();
            }else{
                localStorage.setItem('ruoli',false);
                swal.fire({
                    text: '您决绝了本协议,如果您想继续使用本脚本请刷新后同意本协议!',
                    icon: 'error',
                    confirmButtonColor: '#409EFF',
                });
            }
        });
    }
}

checkStatus();