// ==UserScript==
// @name icve-helper
// @namespace [email protected]
// @version 1.0.0
// @description icve-funs
// @author AI_童话
// @grant GM_xmlhttpRequest
// ==/UserScript==
// 常用url
let urls = {
login: 'https://zjy2.icve.com.cn/api/common/login/login',
// verifyCode: 'https://zjy2.icve.com.cn/api/common/VerifyCode/index?t=',
myHomework_getMyHomeworkList: 'https://zjy2.icve.com.cn/api/student/myHomework/getMyHomeworkList',
homework_detail: 'https://security.zjy2.icve.com.cn/api/study/homework/detail',
homework_history: 'https://security.zjy2.icve.com.cn/api/study/homework/history'
};
/** 向控制台输出 hello world!
* @method hello
*/
function hello() {
console.log("hello world");
}
/** 获取网站的jQuery, 并添加自己的函数
* @method getjQuery
* @param window unsafewindow
* @returns $
*/
function getjQuery(window) {
/** 等待元素出现
* @method wait
* @param func 找到元素后执行
* @param times 检测次数 -1 一直检测
* @param interval 检测间隔 默认20s
*/
window.jQuery.fn.wait = function (func, times, interval) {
var _times = times || -1, // 100次
_interval = interval || 20, // 20毫秒每次
_self = this,
_selector = this.selector, // 选择器
_iIntervalID; // 定时器id
if (this.length) { // 如果已经获取到了,就直接执行函数
func && func.call(this);
} else {
_iIntervalID = setInterval(function () {
if (!_times) { // 是0就退出
clearInterval(_iIntervalID);
}
_times <= 0 || _times--; // 如果是正数就 --
_self = $(_selector); // 再次选择
if (_self.length) { // 判断是否取到
func && func.call(_self);
clearInterval(_iIntervalID);
}
}, _interval);
}
}
return window.jQuery;
}
/*
* 职教云作业解封文本限制 @tuChanged
*/
function uncageCopyLimit() {
let arr = ["oncontextmenu", "ondragstart", "onselectstart", "onselect", "oncopy", "onbeforecopy"]
for (let i of arr)
$(".hasNoLeft").attr(i, "return true")
console.log("已成功复制解除限制,📣如果您有软件定制(管理系统,APP,小程序等),毕设困扰,又或者课程设计困扰等欢迎联系,价格从优,源码调试成功再付款💰,实力保证,包远程,包讲解 QQ:2622321887")
}
// 学生
class Student {
constructor(userName, userPwd) {
this.userName = userName;
this.userPwd = userPwd;
}
// 登录
login() {
return new Promise((resolve, reject) => {
// let verifyCode = $('[name=photoCode]')[0].value;
// console.log(verifyCode);
GM_xmlhttpRequest({
method: 'POST',
url: urls.login,
headers: {
'Content-type': 'application/x-www-form-urlencoded'
},
data: 'userName=' + this.userName +
'&userPwd=' + this.userPwd +
'&verifyCode=' + ''
,
timeout: setting.time,
onload: function (xhr) {
if (xhr.status == 200) {
let obj = JSON.parse(xhr.responseText);
resolve(obj);
}
}
});
});
}
// 获取我的作业列表
getMyHomeworkList(unprocessed) {
return new Promise((resolve, reject) => {
let that = this; // 防止this 丢失
GM_xmlhttpRequest({
url: urls.myHomework_getMyHomeworkList,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
data: 'unprocessed=' + unprocessed || 0,
timeout: setting.timeout,
onload: (xhr) => {
if (xhr.status == 200) {
var obj = JSON.parse(xhr.responseText);
that.hmwrkList = obj.list; // list
resolve(that.hmwrkList);
}
}
});
});
}
// 不写了 累
getDetail(hmwrk) {
if (hmwrk instanceof HomeWork) {
}
}
getHistory(hmwrk) {
if (hmwrk instanceof HomeWork) {
}
}
}
// 我 是 学生
class I extends Student {
constructor(userName, userPwd) {
super(userName, userPwd);
}
// 获取我的试卷信息
getPerivewInfo() {
let courseOpenId = $('[name=courseOpenId]')[0].value;
let openClassId = $('[name=openClassId]')[0].value;
let homeWorkId = $('[name=homeworkId]')[0].value;
let hkTermTimeId = ($('[name=hkTermTimeId]')[0] || $('[name=homeworkTermTimeId]')[0]).value;
this.hmwrk = new HomeWork(courseOpenId, openClassId, homeWorkId, hkTermTimeId); // 获取我的作业信息
return this.hmwrk;
}
copy(hmwrk) {
if (!(hmwrk instanceof HomeWork)) {
return '不是作业没办法复制呢!';
}
fillAnswer(hmwrk.history);
}
}
// 我朋友 是 学生
class MyFriend extends Student {
constructor(userName, userPwd) {
super(userName, userPwd);
}
// 我的朋友帮助我
async helpWith(hmwrk) {
console.log(hmwrk);
if (!(hmwrk instanceof HomeWork)) { // 如果是 HomeWork
return '数据类型错误!'; // 传过来的不是作业
}
console.log(await this.getMyHomeworkList()); // 获取我的作业列表 hmwrkList
let isfndCourse = false; // 是否找到课程
for (let i = 0; i < this.hmwrkList.length; i++) {
let hk = this.hmwrkList[i];
if (hk.courseOpenId == hmwrk.courseOpenId) {
isfndCourse = true; // 找到相应课程
this.hmwrkList = hk.homeworkList; // 根据courseOpenId 获取 homeworkList
break;
}
}
if (!isfndCourse) { // 如果找到相应 课程
return '你们没有报名相同的课程.';
}
let isfndHmwrk = false; // 是否找该作业
for (let i = 0; i < this.hmwrkList.length; i++) {
let hk = this.hmwrkList[i];
if (hk.homeworkId == hmwrk.homeWorkId) {
isfndHmwrk = true;
if (!hk.stuHomeworkCount) return '该学生还未做答!'; // 如果作答次数为0, 直接返回
// 朋友的作业
this.hmwrk = new HomeWork(hk.courseOpenId, hk.openClassId, hk.homeWorkId,
hk.hkTermTimeId)
;
this.hmwrk.info = hk; // 朋友作业的官方信息
await this.hmwrk.getDetail(); // 朋友获取作业的详细
console.log(await this.hmwrk.getHistory()); // 朋友获取作答记录
return '成功获取朋友的作业.';
}
}
return '你的朋友没有这个作业!';
}
}
// 作业
class HomeWork {
constructor(courseOpenId, openClassId, homeWorkId, hkTermTimeId) {
this.courseOpenId = courseOpenId;
this.openClassId = openClassId;
this.homeWorkId = homeWorkId; // 作业id
this.hkTermTimeId = hkTermTimeId;
}
// 获取该作业的详细信息 homeworkStulist
getDetail() {
return new Promise((resolve, reject) => {
GM_xmlhttpRequest({
method: 'POST',
url: urls.homework_detail,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
data: 'courseOpenId=' + this.info.courseOpenId +
'&openClassId=' + this.info.openClassId +
'&homeworkId=' + this.info.homeworkId +
'&hkTermTimeId=' + this.info.hkTermTimeId
// '&dtype=1&viewType=2&unprocessed=0'
,
timeout: setting.time,
onload: xhr => {
if (xhr.status == 200) {
this.detail = JSON.parse(xhr.responseText);
resolve(this.detail);
}
}
});
})
}
// 根据 stuHomeworkId 获取 批过的试卷
getHistory() {
return new Promise((resolve, reject) => {
let index = this.detail.homeworkStulist.length - 1; // 最后一次提交
console.log(this.detail.homeworkStulist);
GM_xmlhttpRequest({
method: 'POST',
url: urls.homework_history,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
data: 'courseOpenId=' + this.detail.courseOpenId +
'&homeWorkId=' + this.detail.homeworkId +
'&studentWorkId=' + this.detail.homeworkStulist[index].Id
,
timeout: setting.time,
onload: xhr => {
if (xhr.status == 200) {
this.history = JSON.parse(xhr.responseText);
resolve(this.history);
}
}
});
})
}
}