职教书签:职教云(智慧职教)网课一键刷完,无需油猴,一个浏览器书签搞定

您所在的位置:网站首页 职教云怎么用手机刷课 职教书签:职教云(智慧职教)网课一键刷完,无需油猴,一个浏览器书签搞定

职教书签:职教云(智慧职教)网课一键刷完,无需油猴,一个浏览器书签搞定

2024-07-14 22:04| 来源: 网络整理| 查看: 265

职教云(智慧职教)网站:https://zjy2.icve.com.cn/ 职教书签官网(开源):https://zj.miya.ink

一句话简介:

一键刷完职教云(智慧职教)所有课程,随机生成学习时间。 支持所有类型:视频、ppt…等等

我需要做什么?

你无需安装任何浏览器插件,你需要做的只是把代码添加到浏览器书签(收藏夹),然后在课程页面单击运行它。

1、先上效果图

2、使用方法

将下面这行代码复制,添加到浏览器书签栏:

1javascript:(function(){function getZjsq(){let s=document.createElement("script");s.src="//i2.wp.com/zj.miya.ink/zjsq_v3.js";s.onerror=function(){alert("加载失败!请到职教书签官网(https://zj.miya.ink/)获取最新书签!")};document.body.appendChild(s)};getZjsq()}());

添加方法(如chrome):

打开书签管理器,添加新书签。

粘贴代码,保存。

添加完毕,之后就按照演示图那样运行即可。

3、原理

逆向分析职教云网页代码,通过运行javascript构造与职教云页面相同的请求,增加课程进度。

4、源代码

以下是职教书签v3的完整源代码,后续请在 https://zj.miya.ink 获取最新代码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338// vars let hrefs = []; let arrowDown = "am-icon-caret-down"; const cl = "class"; const sp = "span"; const st = setTimeout; const classes = ["moduleList", "openOrCloseTopic", "isOpenModulePower"].reduce((a,b)=>{return a.concat(`[${cl}=${b}]`)}, []); var zjsqInfoDom; var currentLessonIndex = 0; var lessonFailed = 0; var totalStudyTime = 0; var losingStreak = 0; var stopFlag = false; // funcs function main() {     try {         // fetch global datas         log("开始获取课件数据!");         globalDataHander();         // get datas         st(() => {             log("正在准备刷取学习进度及时间的必要信息...");             // started             directoryDataRequester(0);         }, 10000);         return "started";     } catch(e) {         log("主程序异常,可能无法正常工作:" + e);     }; }; function log(text) {     const info = `[${new Date().format()}] ${text}`     console.log(info);     zjsqInfoDom.append(info + "");     var ele = zjsqInfoDom[0];     ele.scrollTop = ele.scrollHeight + 999; }; function initial() {     function zjsqCss() {/*         .zjsqInfoBox {             width: 700px;             height: 450px;             background-color:white;             position:absolute;             top:50%;             left:50%;             transform:translateX(-50%) translateY(-50%);             -moz-transform:translateX(-50%) translateY(-50%);             -webkit-transform:translateX(-50%) translateY(-50%);             -ms-transform:translateX(-50%) translateY(-50%);             border-radius:5px;             z-index: 9999;             box-shadow: 3px 3px 10px rgba(0,0,0,.2);             padding: 20px;         }                 .zjsqTitle {             font-weight: bold;             font-size: 16px;             width: 100%;             text-align: center;         }                 #zjysqInfo {             border-radius: 4px;             margin-top: 15px;             padding: 15px;             width: 100%;             height: 370px;             word-wrap: break-word;             overflow-y: scroll;             font-size: 14px;             color: #FAFAFA;             background-color: rgba(0,0,0,.8);         }*/     };                 function zjsqHtml() {/*                     职教书签 v3 Beta                             -time-欢迎使用职教书签~! | 官网:https://zj.miya.ink(开源)                 -time-开始初始化...请勿随意操作页面...                     */     };     function getText (func) {         var str = func.toString().split('\n');         str = str.slice(1, str.length - 1 ).join('\n');         return str.replace(/-time-/g, `[${new Date().format()}] `);     };         function makeDivDraggable(id) {         var Drag = document.getElementById(id);         Drag.onmousedown = function(event) {             var ev = event || window.event;             event.stopPropagation();             var disX = ev.clientX - Drag.offsetLeft;             var disY = ev.clientY - Drag.offsetTop;             document.onmousemove = function(event) {                 var ev = event || window.event;                 Drag.style.left = ev.clientX - disX + "px";                 Drag.style.top = ev.clientY - disY + "px";                 Drag.style.cursor = "move";             };         };         Drag.onmouseup = function() {             document.onmousemove = null;             this.style.cursor = "default";         };     };     try {         console.log("职教书签 v3 | 官网:https://zj.miya.ink");         console.log("开始初始化...请勿随意操作页面...")         Date.prototype.format = function(){             var format = "yyyy-MM-dd HH:mm:ss";             var o = {                 "M+" : this.getMonth()+1, //month                 "d+" : this.getDate(), //day                 "H+" : this.getHours(), //hour                 "m+" : this.getMinutes(), //minute                 "s+" : this.getSeconds(), //second                 "q+" : Math.floor((this.getMonth()+3)/3), //quarter                 "S" : this.getMilliseconds() //millisecond             };                     if(/(y+)/.test(format)) {                 format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));             };                     for(var k in o) {                 if(new RegExp("("+ k +")").test(format)) {                     format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));                 };             };             return format;         };         $("").text(getText(zjsqCss)).appendTo($("head"));         $("body").append(getText(zjsqHtml));         makeDivDraggable("zjsqInfoBoxId");         zjsqInfoDom = $("#zjysqInfo");         return true;     } catch(e) {         log("初始化控制台框架异常:" + e);         return false;     }; }; function hrefParamsToArray(url) {     return url     .substring(url.indexOf('?') + 1)     .split('&')     .map((query) => query.split('='))     .reduce((params, pairs) => (params[pairs[0]] = pairs[1] || '', params), {}); }; function studyProcessRequester(data) {     function getProcessText() {         return `[${new Date().format()}] 完成进度:(${totalCount}/${randomRequestTimes}) / 成功数:${successCount} / 失败数:${failedCount}`     };     if (stopFlag === true) return 0;     var lessonId = `lesson${currentLessonIndex}`;     var successCount = 0;     var failedCount = 0;     var totalCount = 0;     var randomRequestTimes = Math.floor((Math.random() * 87) + 56);     requestData = {         courseOpenId: data.courseOpenId,         openClassId: data.openClassId,         cellId: data.cellId,         cellLogId: data.cellLogId,         picNum: Math.round(324 / randomRequestTimes),         studyNewlyTime: Math.round(14640 / randomRequestTimes),         studyNewlyPicNum: Math.round(324 / randomRequestTimes),         token: data.guIdToken     };     log(`第(${currentLessonIndex}/${hrefs.length})课,课件:${data.cellName},类型:[${data.categoryName}]`);     log(`本次随机学习时间:${(randomRequestTimes * 10 / 60).toFixed(2)}分钟 总请求次数:${randomRequestTimes}`);     log("现在开始上课!");     zjsqInfoDom.append(`${getProcessText()}`);     var ele = zjsqInfoDom[0];     ele.scrollTop = ele.scrollHeight + 999;     var lessonProcessDom = $(`#${lessonId}`);     for (let i = 0; i < randomRequestTimes; i++){         var defer = $.Deferred();         $.ajax({             async: true,             timeout : 5000,             type: "post",             url: urls2.Directory_stuProcessCellLog,             data: requestData,             dataType: "json",             success: function (responseData) {                 successCount += 1;             },             error: function (response) {                 failedCount += 1;             },             complete: function (response) {                 totalCount += 1;                 lessonProcessDom.text(getProcessText());                 if (totalCount === randomRequestTimes) {                     totalStudyTime += randomRequestTimes * 10;                     log(`当前课程(${lessonId}),已完成学习!三秒后开始下一课程...`);                     setTimeout(function() {                         return directoryDataRequester(currentLessonIndex);                     }, 4000);                 };             }         });         requestData.picNum += Math.round(300 / randomRequestTimes);         requestData.studyNewlyTime += Math.round(12640 / randomRequestTimes);         requestData.studyNewlyPicNum += Math.round(300 / randomRequestTimes);     };     return defer; }; function directoryDataRequester(hrefIndex, changeDirectory=false, addData=false) {     if (stopFlag === true) return 0;     var changedFlag = false;     if (hrefIndex < hrefs.length) {         currentLessonIndex = hrefIndex + 1;         if (!addData && changeDirectory !== true) log(`正在获取课件(${currentLessonIndex}/${hrefs.length})的请求令牌...`);         var requestData = hrefParamsToArray(hrefs[hrefIndex]);         if (addData) {             Object.assign(requestData, addData);             console.log(requestData);             delete(requestData["flag"]);         };         var defer = $.Deferred();         $.ajax({             async: true,             timeout: 5000,             type: "post",             url: changeDirectory ? urls2.Directory_changeStuStudyProcessCellData : urls2.Directory_viewDirectory,             data: requestData,             dataType: "json",             success: function (responseData) {                 if (changeDirectory === true) {                     log("课程切换成功!即将重新请求令牌...");                     changedFlag = false;                     return directoryDataRequester(hrefIndex);                 };                 if (responseData.code === 1) {                     log("令牌获取成功!准备就绪...");                     losingStreak = 0;                     return studyProcessRequester(responseData);                 } else if (responseData.code === -100) {                     if (changedFlag === true) {                         log("课程切换失败,将跳过此课程...");                         failedHandler(responseData);                     } else {                         log("收到职教云提示切换课程...准备切换...")                         changedFlag = true;                         changeDirectory = true;                         addData = {cellName: responseData.currCellName, moduleId: responseData.currModuleId};                         return directoryDataRequester(hrefIndex, changeDirectory, addData);                     };                 } else {                     failedHandler(responseData);                 };             },             error: function (response) {                 log(`令牌获取失败!跳过此课程,直接开始下一课:(${currentLessonIndex})`);                 console.log(response);                 lessonFailed += 1;                 losingStreak += 1;                 if (losingStreak > 3) {                     exitHander(-1);                 } else {                     directoryDataRequester(currentLessonIndex);                 };             }         });         return defer;     } else {         exitHander(1);     }; }; function exitHander(status) {     if (status === -1) {         stopFlag = true;         const text = "由于令牌请求连续失败超过三次,所以书签将停止工作!请等待一段时间后再次使用!";         log(text);         alert(text);     };     const result = `本次共学习了${currentLessonIndex}个课件,成功数:${hrefs.length-lessonFailed},失败数:${lessonFailed},计算总学习时间约为:${(totalStudyTime / 60).toFixed(2)}分钟!`     log("**********学习结束!**********");     log(result);     if (status !== -1) alert("学习结束!" + result);     $("#zjsqInfoBoxId").click(function() {         $("#zjsqInfoBoxId").remove();     });     log("感谢您使用职教书签 v3!现在单击本窗口即可关闭。"); }; function globalDataHander() {     // get modules     log("正在获取课件模块数据(1/3)...");     $(classes[0]).each(function () {         const that = $(this).children("div").get(0);         if ($($(that).children(sp).get(1)).attr(cl).search(arrowDown) === -1) that.click();     });     // get children modules     st(() => {         log("正在获取课件详细数据(2/3)...");         $("tr" + classes[1]).each(function () {             if ($($(this).find(sp).get(0)).attr(cl).search(arrowDown) === -1) $(this).click();         });     }, 3000);     // get links         st(() => {         log("正在获取所有课件链接(3/3)...");         $("a" + classes[2]).each(function () {             hrefs.push($(this).attr("data-href"));         });         log("已获取所有课件链接!课件总数:" + hrefs.length);     }, 6000); }; // go if (initial() === true) {     main(); } else {     alert("程序初始化异常,请查看控制台错误信息!"); }; 5、更多想说的

可以识别已经看完的课程并跳过,但是由于我想重复刷取学习时间,并没有这么做。 你可以自行修改代码。

结束



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3