您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
好兄弟,我知道你很累,下班后好好休息。
// ==UserScript== // @name 煤炭行业现代远程教育培训网挂课 // @namespace http://tampermonkey.net/ // @version 0.2 // @description 好兄弟,我知道你很累,下班后好好休息。 // @author You // @match https://www.coaledu.net/html/courseDetails.html* // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_openInTab // @grant GM_notification // @grant GM_getValue // @grant GM_setValue // ==/UserScript== // 界面载入URL //https://www.coaledu.net/html/courseDetails.html?courseID=2135 // 查询课程章节详情 //https://www.coaledu.net/course/front/permit/course/2628/directory?courseid=2628&deviceinfo={"TerminalModel":"iPhone12,1","IMEI":"3E3A8900-F3C3-4DEC-855F-6DDCE79EBB5B","AppCode":"12","AppVersion":"2.2.2","TerminalType":"ios","NetworkType":"wifi","Resolution":"414.000000*896.000000","SysVersion":"15.4"} // 上传学习进度 //https://www.coaledu.net/course/front/course/2628/batchuploadvideoschedule?courseid=2628&datas=[{"upType":"normal","position":925,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:06:35","watchTime":"2022-07-31 01:06:35","videoID":"15930","courseID":"2628"},{"upType":"normal","position":955,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:07:05","watchTime":"2022-07-31 01:07:05","videoID":"15930","courseID":"2628"},{"upType":"normal","position":985,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:07:35","watchTime":"2022-07-31 01:07:35","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1015,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:08:05","watchTime":"2022-07-31 01:08:05","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1045,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:08:35","watchTime":"2022-07-31 01:08:35","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1075,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:09:05","watchTime":"2022-07-31 01:09:05","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1105,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:09:35","watchTime":"2022-07-31 01:09:35","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1135,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:10:05","watchTime":"2022-07-31 01:10:05","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1165,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:10:35","watchTime":"2022-07-31 01:10:35","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1195,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:11:05","watchTime":"2022-07-31 01:11:05","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1225,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:11:35","watchTime":"2022-07-31 01:11:35","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1255,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:12:05","watchTime":"2022-07-31 01:12:05","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1285,"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:12:35","watchTime":"2022-07-31 01:12:35","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1288,"isDrag":0,"spaceTime":3,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:12:38","watchTime":"2022-07-31 01:12:38","videoID":"15930","courseID":"2628"},{"upType":"normal","position":1288,"isDrag":0,"spaceTime":3,"platform":"ios","videoType":"1","lastTime":"2022-07-31 01:12:38","watchTime":"2022-07-31 01:12:38","videoID":"15930","courseID":"2628"}]&deviceinfo={"TerminalModel":"iPhone12,1","IMEI":"3E3A8900-F3C3-4DEC-855F-6DDCE79EBB5B","AppCode":"12","AppVersion":"2.2.2","TerminalType":"ios","NetworkType":"wifi","Resolution":"414.000000*896.000000","SysVersion":"15.4"}&studyType=0 (function() { //创建函数 //获取用户authorization setTimeout(function() { var iframe = document.createElement('iframe'); var auth; iframe.onload = function() { //Iframes must be appended to the DOM in order to be loaded //Iframes do not load immediately nor synchronously //now (after load) we can use iframe.contentWindow: //window.localStorage = iframe.contentWindow.localStorage; //you can use it, but better is like: var ifrLocalStorage = iframe.contentWindow.localStorage; //But DO NOT: "document.body.removeChild(iframe);" because after it access on 'Storage' will be denied auth = ifrLocalStorage.getItem('coaledu-front-token'); console.log("#0 获取到用户登录(不可用)凭证: ",auth); }; iframe.src = 'about:blank'; document.body.appendChild(iframe); //根据身份证计算唯一IMEI function jCode(value) { var keys = "A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z"; var kleng = keys.length; var kstr = keys.split(""); var v = "",cat, cat1, cat2, cat3; for (var i = 0; i <value.length; i ++) { cat = value.charCodeAt(i); cat1 = cat % kleng; cat = (cat - cat1) / kleng; cat2 = cat % kleng; cat = (cat - cat2) / kleng; cat3 = cat % kleng; v += kstr[cat3] + kstr[cat2] + kstr[cat1]; } return v; console.log(v); } //分割函数 function getStr(string,str,where){ var str_before = string.split(str)[0]; var str_after = string.split(str)[1]; if (where == "before"){ return str_before; }else if(where =="after"){ return str_after; } } //格式化时间 function format(dat){ //获取年月日,时间 var year = dat.getFullYear(); var mon = (dat.getMonth()+1) < 10 ? "0"+(dat.getMonth()+1) : dat.getMonth()+1; var data = dat.getDate() < 10 ? "0"+(dat.getDate()) : dat.getDate(); var hour = dat.getHours() < 10 ? "0"+(dat.getHours()) : dat.getHours(); var min = dat.getMinutes() < 10 ? "0"+(dat.getMinutes()) : dat.getMinutes(); var seon = dat.getSeconds() < 10 ? "0"+(dat.getSeconds()) : dat.getSeconds(); var newDate = year +"-"+ mon +"-"+ data +" "+ hour +":"+ min +":"+ seon; return newDate; } //获取时间 var dat = new Date(); //格式化时间 var newDate = format(dat); //主程序启动 var userid = document.getElementsByClassName('person-name')[0].innerText; if(userid=="登录(不可用)"){ alert("未登录(不可用),请进行登录(不可用)"); } else if(userid.indexOf('1')>=0) { //获取课程ID function getcourseID(){ //并入主程序中 } //获取章节ID getvideoID = function (checklink){ var lis = document.getElementsByClassName('hd')[0].getElementsByTagName('li'); lis[1].click(); GM_xmlhttpRequest({ method: "GET", url: encodeURI(checklink), responseType: "json", timeout:15000, onload: function(res){ if (res.responseText!=="") { var d = JSON.parse(res.responseText); if (d.status=="1" && d.message=="success") { console.log("#5 尝试获取当前课程video信息"); // 处理 directorys if (d.data.directorys && d.data.directorys.length !== 0) { d.data.directorys.forEach(directory => { // 处理直接挂在 directory 下的 videos if (directory.videos && directory.videos.length) { directory.videos.forEach(video => { console.log("#5 获取视频信息成功:", directory.ID, video.ID, video.length); getuploadurl(courseID, video.ID, video.length); }); } // 处理 children 中的 videos if (directory.children && directory.children.length) { directory.children.forEach(child => { if (child.videos && child.videos.length) { child.videos.forEach(video => { console.log("#5 获取子目录视频信息成功:", child.ID, video.ID, video.length); getuploadurl(courseID, video.ID, video.length); }); } }); } }); } // 处理独立的 videos if (d.data.videos && d.data.videos.length !== 0) { d.data.videos.forEach(video => { console.log("#5 获取视频信息成功:", video.ID, video.length); getuploadurl(courseID, video.ID, video.length); }); } } else { document.getElementsByClassName('con-carousel')[1].innerHTML += '<h1>This is bug2</h1>'; console.log("@@ this is bug2"); } } else { document.getElementsByClassName('con-carousel')[1].innerHTML += '<h1>This is bug1</h1>'; console.log("@@ this is bug1"); } } }); } getuploadurl = function(courseID,videosID,videostime){ var videosdatas = '[{"upType":"normal","position":'+videostime+',"isDrag":0,"spaceTime":30,"platform":"ios","videoType":"1","lastTime":"'+newDate+'","watchTime":"'+newDate+'","videoID":"'+videosID+'","courseID":"'+courseID+'"}]'; //var uploadlink = 'https://www.coaledu.net/course/front/course/'+courseID+'/batchuploadvideoschedule?courseid='+courseID+'&datas='+encodeURIComponent(videosdatas)+'&deviceinfo='+encodeURIComponent(deviceinfo)+'&studyType=0'; //这里删除了deviceid因为Authorization加密是根据imei计算的,随机生成的imei和浏览器登录(不可用)所对应的Authorization不匹配 //如果post包含了deviceid信息,则会提示别处登录(不可用) //如果用浏览器登陆所获的Authorization,在post的时候不提交deviceid也可以成功,所以删掉了 var uploadlink = 'https://www.coaledu.net/course/front/course/'+courseID+'/batchuploadvideoschedule?courseid='+courseID+'&datas='+encodeURIComponent(videosdatas)+'&studyType=0'; console.log(uploadlink); GM_xmlhttpRequest({ method:"POST", url:uploadlink, responseType:"json", timeout:15000, headers: { "Authorization": auth, "User-Agent": "zhong guo mei tan jiao yu pei xun/2.2.2 (iPhone; iOS 15.4; Scale/2.00)" }, onload:function(res){ if (res.responseText!=="") { var d = JSON.parse(res.responseText); if (d.status=="1"&&d.message=="上传视频进度成功") { console.log("#6 上传当前课程video信息成功",uploadlink) document.getElementsByClassName('detailDet')[0].innerHTML +="学习成功<br>"; } } } }) } url = window.location.href; courseID = getStr(url,'=','after'); imei = "3E3A8900-F3C3-4DEC-855F-"+jCode(userid.substring(userid.length-4,userid.length)); //imei ="3E3A8900-F3C3-4DEC-855F-6DDCE79EBB5B"; deviceinfo = '{"TerminalModel":"iPhone12,1","IMEI":"'+imei+'","AppCode":"12","AppVersion":"2.2.2","TerminalType":"ios","NetworkType":"wifi","Resolution":"414.000000*896.000000","SysVersion":"15.4"}'; console.log("#1 获取到用户账户信息:",userid); console.log("#2 计算出用户唯一IMEI:",imei); console.log("#3 计算出用户唯一DeviceInfo:",deviceinfo); checklink = 'https://www.coaledu.net/course/front/permit/course/'+courseID+'/directory?courseid='+courseID; console.log("#4 计算出当前课程章节URL:",checklink); document.getElementsByClassName('detailDet')[0].innerHTML +='<button onclick="getvideoID(checklink)" style="display: inline-block;border-radius: 3px;font-size: 16px;background: rgb(72,127,222);color: #fff;width: 140px;text-align: center;margin:15px;padding: 10px 20px;font-weight:bold;">加载外挂</button>'; } }, 3000); // 延迟5000毫秒(5秒) })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址