李硕专刷视频脚本,超星学习通后台挂视频,全网最牛逼的刷视频脚本,可边打游戏边刷课。自动跳转章节,可开启复习模式,倍速播放,超星学习通尔雅,手机电脑均可使用,真正的挂机刷视频。

超星学习通视频后台挂机,文档自动完成,不得不说李硕真的是泰酷辣,如有问题联系我https://afdian.com/a/zwsssb 最终解释权归李硕所有。😀每日测试,确保脚本100%正常可用。具体测试时间请看详情页介绍😀emm……………………………………………………………………………………我还是希望你们能赞助我一瓶冰阔落,https://afdian.com/a/zwsssb 这个链接就可以赞助给我了,我相信使用这个脚本的都是我的朋友。❤️❤️❤️请看下方使用说明❤️❤️❤️

目前为 2024-11-22 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name 李硕专刷视频脚本,超星学习通后台挂视频,全网最牛逼的刷视频脚本,可边打游戏边刷课。自动跳转章节,可开启复习模式,倍速播放,超星学习通尔雅,手机电脑均可使用,真正的挂机刷视频。
  3. // @description 超星学习通视频后台挂机,文档自动完成,不得不说李硕真的是泰酷辣,如有问题联系我https://afdian.com/a/zwsssb 最终解释权归李硕所有。😀每日测试,确保脚本100%正常可用。具体测试时间请看详情页介绍😀emm……………………………………………………………………………………我还是希望你们能赞助我一瓶冰阔落,https://afdian.com/a/zwsssb 这个链接就可以赞助给我了,我相信使用这个脚本的都是我的朋友。❤️❤️❤️请看下方使用说明❤️❤️❤️
  4. // @namespace http://tampermonkey.net/
  5. // @version 1.9.16.12
  6. // @author 李硕
  7. // @match *://*.chaoxing.com/*
  8. // @match *://*.edu.cn/*
  9. // @match *://*.nbdlib.cn/*
  10. // @match *://*.hnsyu.net/*
  11. // @icon https://scriptcat.org/api/v2/resource/image/4SZfPriSlLHYLZDn
  12. // @run-at document-end
  13. // @connect sso.chaoxing.com
  14. // @connect mooc1-api.chaoxing.com
  15. // @connect mooc1-1.chaoxing.com
  16. // @connect mooc1-2.chaoxing.com
  17. // @connect fystat-ans.chaoxing.com
  18. // @connect api.dbask.net
  19. // @grant unsafeWindow
  20. // @grant GM_xmlhttpRequest
  21. // @grant GM_info
  22. // @compatible firefox
  23. // @compatible chrome
  24. // @compatible edge
  25. // @compatible Safari
  26. // @compatible Opera
  27. // @compatible Maxthon
  28. // @compatible AdGuard
  29. // @require https://lib.baomitu.com/jquery/3.6.0/jquery.min.js
  30. // @require https://update.greasyfork.org/scripts/518483/1489073/md5%E5%BA%93-666.js
  31. // @require https://greasyfork.org/scripts/456170-hacktimerjs/code/hacktimerjs.js?version=1125728
  32. // ==/UserScript==
  33. (function() {
  34. 'use strict';
  35. var $=unsafeWindow.$,layui,layer,form,courseList,cpi,clazzid,uid,ua_str=str_z("32"),script_info=GM_info.script;
  36. //请求封装
  37. function requests(url,data="",type="get"){
  38. return new Promise((resolve, reject) => {
  39. var headers={
  40. "User-Agent": "User-Agent: Dalvik/2.1.0 (Linux; U; Android 11; M3121K1AB Build/SKQ1.211006.001) (device:M3121K1AB) Language/zh_CN com.chaoxing.mobile/ChaoXingStudy_3_5.1.4_android_phone_614_74 (@Kalimdor)_"+ua_str,
  41. 'X-Requested-With': 'XMLHttpRequest',
  42. 'Sec-Fetch-Site': 'same-origin',
  43. "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
  44. "host": "mooc1-1.chaoxing.com",
  45. };
  46.  
  47. GM_xmlhttpRequest({
  48. method: type,
  49. url: url,
  50. data:data,
  51. headers: headers,
  52. onload: function (xhr) {
  53. try {
  54. let obj=$.parseJSON(xhr.responseText) || {};
  55. if(obj.error){
  56. layer.msg("请输入验证码");
  57. layer.open({
  58. type: 1,
  59. title:"【官方验证】请输入验证码",
  60. skin: 'layui-layer-rim', //加上边框
  61. area: ['420px', '240px'], //宽高
  62. content: '<img src="'+obj.verify_png_path+'"/> <input type="text" class="code_input" placeholder="请输入图中的验证码" /><button id="code_btn">验证</button>'
  63. });
  64. $("#code_btn").on('click',function(){
  65. let code=$(".code_input").val();
  66. if(code.length!==4){
  67. layer.msg("不得不说李硕真的是泰酷辣");
  68. }else{
  69. let url=obj.verify_path+"&ucode="+code;
  70. console.log(url);
  71. window.open(url);
  72. }
  73. });
  74. }
  75. resolve(obj);
  76. }
  77. catch(err){
  78. resolve(xhr.responseText);
  79. }
  80. }
  81. });
  82. })
  83. }
  84. function get_enc(clazzid,uid,jobid,objectId,playingTime,duration){
  85. var str = "["+clazzid+"]["+uid+"]["+jobid+"]["+objectId+"]["+(playingTime * 1000)+"][d_yHJ!$pdA~5]["+(duration * 1000)+"][0_"+duration+"]";
  86. var hash = md5(str);
  87. return hash;
  88. }
  89. function sleep(time) {
  90. return new Promise(resolve =>
  91. setTimeout(resolve,time)
  92. ) }
  93. function str_z(len) {
  94. len = len || 32;
  95. let $chars = 'qwertyuioplkjhgfdsazxcvbnm1234567890';
  96. let maxPos = $chars.length;
  97. let pwd = '';
  98. for (let i = 0; i < len; i++) {
  99. pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
  100. }
  101. return pwd;
  102. }
  103. //刷视频用的
  104. async function video_s(objectId,knowledgeId,cpi,clazzid, jobid,uid,otherInfo,rt="0.9",module){
  105. console.log("开始");
  106. let url = "https://mooc1-1.chaoxing.com/ananas/status/" + objectId + "?k=&flag=normal&"
  107. let obj=await requests(url);
  108. console.log(obj);
  109. let duration=obj.duration;//视频总长度
  110. let dtoken=obj.dtoken;
  111. let clipTime = "0_" + duration;
  112. let ztype=obj
  113. let timer;
  114. $("#app2").append('<div id="jdf" style="width:500px" class="layui-progress layui-progress-big" lay-filter="demo" lay-showPercent="true">当前视频进度<div id="jd" class="layui-progress-bar layui-bg-blue" lay-percent="0%"></div></div>');
  115. let beisu=$("#beisu").val()||1;
  116. let num =0;
  117. for(let playingTime=0;playingTime<=duration;playingTime=playingTime+~~beisu){
  118. beisu=$("#beisu").val()||1;
  119. layui.element.progress('demo', ~~(playingTime/duration*100)+"%");
  120. add_log("视频挂机ing..."+playingTime+" - "+duration+"s");
  121. console.log($("#beisu").val()||1,playingTime);
  122. let out = await sleep(1000);
  123. if(num%~~(60/beisu)==0){
  124. add_log("视频进度提交(每60s提交一次)");
  125. let req=await video_p(clazzid,uid,jobid,objectId,playingTime,duration,cpi,dtoken,otherInfo,rt,module);
  126. if(req&&$("#pattern").val()!=="2"){
  127. add_log("当前视频已完成,不得不说李硕真的是泰酷辣,李硕正在跳转下一个");
  128. break;
  129. }
  130. }
  131. num=num+1
  132. }
  133.  
  134. let req=await video_p(clazzid,uid,jobid,objectId,duration,duration,cpi,dtoken,otherInfo,rt,module);
  135. console.log(123,req);
  136. while(!req&&$("#pattern").val()!=="2"){
  137. let req=await video_p(clazzid,uid,jobid,objectId,duration,duration,cpi,dtoken,otherInfo,rt,module);
  138. add_log("进度提交中...不得不说李硕真的是泰酷辣");
  139. let out = await sleep(1000);
  140. }
  141. if(req){
  142. add_log("当前视频已完成,李硕正在跳转下一个,不得不说李硕真的是泰酷辣");
  143. }
  144. $("#jdf").remove();
  145. }
  146. async function video_p(clazzid,uid,jobid,objectId,playingTime,duration,cpi,dtoken,otherInfo,rt,module){
  147. let enc=get_enc(clazzid,uid,jobid,objectId,playingTime,duration);
  148. let type=module.includes('audio')?"Audio":"Video";
  149. let url = "https://mooc1-api.chaoxing.com/multimedia/log/a/"+cpi+"/"+dtoken+"?otherInfo="+otherInfo+"&playingTime="+playingTime+"&duration="+duration+"&akid=null&jobid="+jobid+"&clipTime=0_"+duration+"&clazzId="+clazzid+"&objectId="+objectId+"&userid="+uid+"&isdrag=4&enc="+enc+"&rt="+rt+"&dtype="+type+"&view=json";
  150. let obj=await requests(url);
  151. console.log(url);
  152. if(obj.isPassed===undefined){
  153. add_log("进度保存失败!请联系李硕反馈","err");
  154. }
  155. return obj.isPassed;
  156. }
  157. //刷直播用的
  158. async function live_s(streamName,vdoid,jobid,uid,knowledgeId,clazzid,courseid){
  159. let url='https://live.chaoxing.com/courseLive/newpclive?streamName=' + streamName + '&vdoid=' + vdoid + '&width=630&height=530&jobid=' + jobid + '&userId='+uid+'&knowledgeid='+knowledgeId+'&ut=s&clazzid='+clazzid+'&courseid='+courseid;
  160. let obj=await requests(url);
  161. console.log(obj);
  162. }
  163. //刷文档
  164. async function document_s(jobid,knowledgeId,courseid,clazzid,jtoken){
  165. let url='https://mooc1-2.chaoxing.com/ananas/job/document?jobid='+jobid+'&knowledgeid='+knowledgeId+'&courseid='+courseid+'&clazzid='+clazzid+'&jtoken='+jtoken+'&_dc=1607066762782';
  166. let obj=await requests(url);
  167. if(obj.status===true){
  168. add_log("文档-"+obj.msg);
  169. }else{
  170. console.log(url);
  171. add_log("文档-"+obj.msg,"err");
  172. }
  173. }
  174. //学习次数
  175. async function log_s(courseid,clazzid,cpi){
  176. let url = "https://mooc1-2.chaoxing.com/visit/stucoursemiddle?courseid="+courseid+"&clazzid="+clazzid+"&vc=1&cpi="+cpi;
  177. let obj=await requests(url);
  178. url="https://fystat-ans.chaoxing.com/log/setlog"+obj.split("/log/setlog")[1].split('">')[0];
  179. obj=await requests(url);
  180. console.log(url);
  181. if(obj=="'success'"){
  182. add_log("李硕提示你成功增加学习次数");
  183. }
  184. }
  185. //章节
  186. async function task(workId,courseId,clazzId,knowledgeId,jobId,enc,cpi){
  187. let url="https://mooc1-api.chaoxing.com/work/phone/work?workId="+workId+"&courseId="+courseId+"&clazzId="+clazzId+"&knowledgeId="+knowledgeId+"&jobId="+jobId+"&enc="+enc+"&cpi="+cpi;
  188. console.log(url);
  189. let obj=await requests(url);
  190. console.log(obj);
  191. }
  192. async function know_start(courseStartData){
  193. //获取课程知识点
  194. let courseKnowData={};
  195. for(let courseData of courseStartData){
  196. add_log("正在获取【"+courseData[0]+"】课程任务点");
  197. let debug=false;
  198. let url="https://mooc1-api.chaoxing.com/gas/clazz?id="+courseData[2]+"&personid="+courseData[3]+"&fields=id,bbsid,classscore,isstart,allowdownload,chatid,name,state,isthirdaq,isfiled,information,discuss,visiblescore,begindate,coursesetting.fields(id,courseid,hiddencoursecover,hiddenwrongset,coursefacecheck),course.fields(id,name,infocontent,objectid,app,bulletformat,mappingcourseid,imageurl,teacherfactor,jobcount,expandreadstate,knowledge.fields(id,name,indexOrder,parentnodeid,status,layer,label,jobcount,begintime,endtime,attachment.fields(id,type,objectid,extension).type(video)))&view=json"
  199. let obj=await requests(url);
  200. debug&&console.log(obj);
  201. let knowlist=obj.data[0].course.data[0].knowledge.data.filter(function(value){
  202. if(value.parentnodeid===0){
  203. courseKnowData[value.id]=[];
  204. }else{
  205. if(courseKnowData[value.parentnodeid]===undefined){
  206. courseKnowData[value.parentnodeid]=[]
  207. }
  208. courseKnowData[value.parentnodeid].push(value)
  209. }
  210. return true;
  211. return value.status==="open";
  212. });
  213. let knowlistId=[];
  214. for(let keys in courseKnowData){
  215. for(let ids in courseKnowData[keys]){
  216. knowlistId.push(courseKnowData[keys][ids].id);
  217. }
  218. }
  219. let data ="courseid="+courseData[1]+"&clazzid="+courseData[2]+"&cpi="+courseData[3]+"&nodes="+knowlistId.join(",")+"&time="+(new Date()).valueOf()+"&userid="+uid+"&view=json";
  220. $("#pattern").val()==="2"?add_log("李硕提示你已选择复习模式,开始补时长"):add_log("正在过滤已完成和未解锁的任务点..");
  221. //筛选未完成知识点
  222. obj=await requests("https://mooc1-api.chaoxing.com/job/myjobsnodesmap",data,"post");
  223. debug&&console.log(obj);
  224. let unfinishlist=knowlist.filter(function(value){
  225. if((value.jobcount!==0&&obj[value.id].unfinishcount!==0)||$("#pattern").val()==="2"){
  226. return true;
  227. }
  228. });
  229. debug&&console.log(unfinishlist);
  230. let unfinishlists=unfinishlist.map(function(value){
  231. return value.id;
  232. });
  233. //console.log(unfinishlists);
  234. //开整
  235. add_log("start 李硕要开整了!");
  236. for(let val of knowlistId){
  237. //取章节内的知识点
  238. //console.log(val);
  239. if(!unfinishlists.includes(val)){
  240. continue;
  241. }
  242. add_log("李硕正在打开任务点中的视频,不得不说李硕真的是泰酷辣,");
  243. url = "https://mooc1-api.chaoxing.com/gas/knowledge?id="+val+"&courseid="+courseData[1]+"&fields=id,parentnodeid,indexorder,label,layer,name,begintime,createtime,lastmodifytime,status,jobUnfinishedCount,clickcount,openlock,card.fields(id,knowledgeid,title,knowledgeTitile,description,cardorder).contentcard(all)&view=json";
  244. obj=await requests(url);
  245. let out = await sleep(1000);
  246. let cardData=obj.data[0].card.data.map(function(value){
  247. try {
  248. return [value.cardorder,value.knowledgeid,$(value.description).find("iframe").attr("module")];
  249. } catch(err){
  250. add_log("module不存在!","err");
  251. return [];
  252. }
  253. });
  254. log_s(courseData[1],courseData[2],courseData[3]);
  255. for(let cardData1 of cardData){
  256. url = "https://mooc1-api.chaoxing.com/knowledge/cards?clazzid="+courseData[2]+"&courseid="+courseData[1]+"&knowledgeid="+cardData1[1]+"&num="+cardData1[0]+"&isPhone=0&control=true&cpi="+courseData[3];
  257. //console.log(url);
  258. let text=await requests(url);
  259. console.log(url);
  260. let out = await sleep(1000);
  261. let result_json;
  262. try {
  263. result_json=$.parseJSON("{" + text.split("mArg = {")[1].split("};")[0] + "}").attachments;
  264. } catch(err){
  265. add_log("不出意外的话章节未开放");
  266. break;
  267. }
  268. console.log(result_json);
  269. debug&&console.log(result_json);
  270. for(let val1 of result_json){
  271. debug&&console.log(val1);
  272. let objectid,enc,workid,streamName,vdoid,jtoken,jobid,workenc,module;
  273.  
  274. switch(val1.type){
  275. case "video"://视频
  276. add_log("李硕正在看视频 : "+val1.property.name);
  277. objectid=val1.objectId;
  278. jobid=val1.jobid;
  279. module=val1.property.module
  280. await video_s(objectid,cardData1[1],courseData[3],courseData[2], jobid,uid,val1.otherInfo,val1.property.rt||"0.9",module);
  281. break;
  282. case "live"://直播
  283. add_log("直播任务点,暂时不做","err");
  284. streamName=val1.property.streamName;
  285. vdoid=val1.property.vdoid;
  286. break;
  287. case "document"://文档
  288. add_log("李硕正在看文档: "+val1.property.name);
  289. jtoken=val1.jtoken
  290. jobid=val1.jobid||val1.property._jobid;
  291. document_s(jobid,cardData1[1],courseData[1],courseData[2],jtoken)
  292. break;
  293. case "bookname"://阅读
  294. add_log("book任务点,暂时不做 ","err");
  295. jtoken=val1.jtoken
  296. break;
  297. case "workid"://章节作业
  298. workenc = val1.enc;
  299. workid = val1.property.workid;
  300. jobid=val1.jobid;
  301. //task(workid,courseData[1],courseData[2],cardData1[1],jobid,workenc,courseData[3])
  302. add_log("当前知识点 : 章节测验- "+val1.property.title+" ps:章节测验请自行完成","err");
  303. //好好学习天天向上
  304. break
  305. default:
  306. break
  307. }
  308. debug&&console.log(val1);
  309. }
  310. }
  311. //break;
  312. }
  313. };
  314. add_log("end 李硕提示你任务已完成!不得不说李硕真的是泰酷辣");
  315.  
  316. }
  317. function dateFormat(fmt, date) {
  318. let ret;
  319. const opt = {
  320. "Y+": date.getFullYear().toString(),
  321. "m+": (date.getMonth() + 1).toString(),
  322. "d+": date.getDate().toString(),
  323. "H+": date.getHours().toString(),
  324. "M+": date.getMinutes().toString(),
  325. "S+": date.getSeconds().toString()
  326. };
  327. for (let k in opt) {
  328. ret = new RegExp("(" + k + ")").exec(fmt);
  329. if (ret) {
  330. fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
  331. };
  332. };
  333. return fmt;
  334. }
  335. function add_log(text,type="succ"){
  336. if($("#log").find("div").length>12){
  337. $("#log").find("div")[0].remove()
  338. }
  339. let date = new Date();
  340. if(type==="succ"){
  341. $("#log").append('<div>'+dateFormat("YYYY-mm-dd HH:MM", date)+" "+text+'</div>');
  342. }else{
  343. $("#log").append('<div style="color:red;">'+dateFormat("YYYY-mm-dd HH:MM", date)+" "+text+'</div>');
  344. }
  345. }
  346. async function init(){
  347. //
  348. //
  349. //
  350. // ... 其他代码 ...
  351.  
  352. // 在页面加载时立即应用背景图片
  353. document.body.style.backgroundImage = 'url("https://scriptcat.org/api/v2/resource/image/mvmaHF1KJphl1yiY")';
  354. document.body.style.backgroundSize = 'cover';
  355. document.body.style.backgroundPosition = 'center';
  356. document.body.style.backgroundRepeat = 'no-repeat';
  357.  
  358. // 然后继续初始化页面结构
  359. document.body.innerHTML = '<div><div class="layui-row layui-col-space15"><div class="layui-col-md6 layui-col-md-offset3"><div style="padding:50px;border-radius:20px" class="layui-panel" id="app"></div></div></div></div>';
  360.  
  361. // ... 后续的代码 ...
  362. //
  363. //
  364. //
  365. //那个框的背景图片在那个url后面的括号里面
  366. document.body.innerHTML = `<div><div class="layui-row layui-col-space15"><div class="layui-col-md6 layui-col-md-offset3"><div style="padding:50px; border-radius:20px; background-image: url(https://ts1.cn.mm.bing.net/th/id/R-C.d55bcddfc476e85bcf65631436718314?rik=Meu4ijf67mEuyw&riu=http%3a%2f%2fimg.pptjia.com%2fimage%2f20181101%2f5f785ad0634638e7c36fb25d9d69edf2.jpg&ehk=R1YFyFLvb79iDfSyDb7QbY%2b4wFU0kEZKuBuuVrd%2fxJ0%3d&risl=&pid=ImgRaw&r=0); background-size: cover; background-position: center;" class="layui-panel" id="app"></div> </div></div></div>`;
  367. //
  368. //
  369. //
  370. //
  371. //这个是老代码
  372. //document.body.innerHTML = '<div><div class="layui-row layui-col-space15"><div class="layui-col-md6 layui-col-md-offset3"><div style="padding:50px;border-radius:20px" class="layui-panel" id="app"></div></div></div></div>';
  373. $("#app").append('<h1>李硕视频专版 v'+script_info.version+'</h1>');
  374. $("#app").append("<div>近期遭到频繁屌丝(DOSS)攻击,Wish Today,若出现不能使用,请耐心等待。\n相信大家也发现现在好用的脚本很少了,有的用着用着就不能用了,这是因为需要服务器费用和人工进行维护,我希望大家每个人都能出一份力,使这个脚本一直维护下去,感谢每一个好心的人,点击下方按钮即可赞助我一瓶冰阔落<br />遇到问题点击下方按钮,详询爱发电。</div>");
  375. //
  376. //
  377. //
  378. //
  379. // 在现有的代码中添加一个新的按钮
  380. $("#app").append('<button class="layui-btn" style="background-color: skyblue; color: white; border-radius: 10px;" onclick="window.location.href=\'https://afdian.com/a/zwsssb\'">向李硕赞助瓶可乐</button>');
  381. $("#app").append('<button class="layui-btn" style="background-color: #B19CD9; color: white; border-radius: 10px;" onclick="window.location.href=\'https://afdian.com/item/3a3565f08f5611ee93c352540025c377\'">遇到问题点击</button>');
  382. $("#app").append('<button class="layui-btn" style="background-color: #FFC125; color: black; border-radius: 10px;" onclick="window.location.href=\'https://scriptcat.org/api/v2/resource/image/DPLuoDj47JY16LuM\'">领个支付宝红包</button>');
  383. //
  384. //$("#app").append('<button class="layui-btn" style="background-color: blue; color: white; border-radius: 5px;" onclick="window.location.href=\'https://www.aelectricity.com/\'">访问爱发电</button>');
  385. //
  386. //
  387. //
  388. //
  389. //
  390. //
  391. //
  392. //
  393. //
  394. //
  395. //获取用户个人信息
  396. $("#app").append("<div>不得不说李硕真的是泰酷辣</div><form class='layui-form' id='app2'></form>");
  397. $("#app2").append('<div><label class="layui-form-label">学习模式</label><div class="layui-input-block"><select id="pattern""><option value="1">正常模式</option><option value="2">补时长模式</option></select></div></div>');
  398. $("#app2").append('<div><label class="layui-form-label">你的速度</label><div class="layui-input-block"><select id="beisu"><option value="999999">默认速度</option><option value="1">1倍速</option><option value="2">2倍速</option><option value="4">4倍速</option><option value="520">520倍速</option><option value="9999">秒刷</option><option value="6666">希望能够支持我一下</option></select><span style="color:lime">推荐使用默认速度,如弹验证码,或无法提交进度,进入此网页获取解决方法https://afdian.com/item/3a3565f08f5611ee93c352540025c377 或者点击上方“遇到问题点击”的按钮</span></div></div>');
  399. //
  400. // 开始按钮换颜色的示例
  401. // <button class="layui-btn layui-btn-primary layui-border-red" style="background-color: #B19CD9; color: white; border-radius: 5px;"type="button" id="start_btn">开始</button>
  402. //
  403. $("#app2").append('<label class="layui-form-label">学习科目</label><div class="layui-input-block"><select id="course_choose"><option value="0">全刷</option></select><button class="layui-btn layui-btn-primary layui-border-white" style="background-color: RED; color: white; border-radius: 10px;" type="button" id="start_btn">开始</button>');
  404. $("#app2").append('<div id="log" style="color: violet;"></div>');
  405. let debug=true;
  406. add_log("不得不说李硕真的是泰酷辣...(长时间无动静为加载失败,)");
  407. // 从cookie获取uid
  408. try{
  409. uid = document.cookie.match(/UID=([^;]+)/)[1];
  410. }
  411. catch(e){
  412. add_log("获取UID失败,请退出超星后重新登录","err");
  413. return;
  414. }
  415. //获取课程列表
  416. let obj=await requests('https://mooc1-api.chaoxing.com/mycourse/backclazzdata?view=json&mcode=');
  417. console.log(obj);
  418. courseList=obj.channelList.map( function(value,index){
  419. if(value.content.course){
  420. $("#course_choose").append('<option value="'+value.content.course.data[0].id+'">'+value.content.course.data[0].name+'</option>');
  421. form.render('select');
  422. return [value.content.course.data[0].name,value.content.course.data[0].id,value.key,value.cpi];
  423. }else{
  424. return [0,0,0,0];
  425. }
  426. });
  427. debug&&console.log(courseList);
  428. add_log("共获取"+courseList.length+"门课程");
  429. $("body").append("<h3 id='msg'></h3>");
  430. $("#start_btn").on('click',function(){
  431. let courseStartData=courseList.filter(function (value){
  432. if(value[0]===0){
  433. return false;
  434. }
  435. if(value[1].toString()===$("#course_choose").val()||$("#course_choose").val()==="0"){
  436. return true;
  437. }
  438. return false;
  439. })
  440.  
  441. know_start(courseStartData);
  442. });
  443.  
  444. }
  445. $('head').append('<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"><link href="https://lib.baomitu.com/layui/2.6.8/css/layui.css" rel="stylesheet" type="text/css" />');
  446. $.getScript("https://lib.baomitu.com/layui/2.6.8/layui.js", function(data, status, jqxhr) {
  447. layui=unsafeWindow.layui;
  448. layer=unsafeWindow.layer;
  449. form = layui.form;
  450. $(".root").remove();
  451. if(location.href.indexOf("base/settings")!=-1){
  452. init();
  453. }else if(location.href.indexOf("visit/interaction")!=-1){
  454. //支付宝红包 $(".btn_group").append('<a id="addCourse" class="jb_btn jb_btn_104 fs14" href="https://scriptcat.org/api/v2/resource/image/DPLuoDj47JY16LuM" target="_top">领个支付宝红包</a>');
  455. $(".btn_group").append('<a id="addCourse" class="jb_btn jb_btn_104 fs14" href="https://afdian.com/item/3a3565f08f5611ee93c352540025c377" target="_top">遇到问题点击</a>');
  456. $(".btn_group").append('<a id="addCourse" class="jb_btn jb_btn_104 fs14" href="https://i.chaoxing.com/base/settings" target="_top">开始刷视频👌</a>');
  457. }
  458. });
  459. })();
  460. (function() {
  461. 'use strict';
  462.  
  463. // 等待页面加载完成
  464. window.addEventListener('load', function() {
  465. // 查找 .course-tab 元素
  466. var courseTab = document.querySelector('.course-tab');
  467. if (courseTab) {
  468. // 查找 .current 类的所有子元素
  469. var currentItems = courseTab.querySelectorAll('.current');
  470. for (var i = 0; i < currentItems.length; i++) {
  471. // 替换文本内容
  472. currentItems[i].textContent = "我的好朋友们,欢迎使用李硕专刷视频脚本!使用前请仔细阅读油叉上的使用说明,遇到问题在爱发电联系我,祝您使用愉快!!!";
  473. }
  474. }
  475. });
  476. })();
  477. //
  478. //
  479. //
  480. //
  481. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  482. //点击课程后的弹窗
  483. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  484. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  485. //--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  486. !!(function(){
  487. const $w = unsafeWindow,
  488. $l = $w.location.href,
  489. $d = $w.document,
  490. $version = GM_info.script.version.replaceAll('.',''),
  491. $s = Object.fromEntries(new URLSearchParams($w.location.search)),
  492. getCookie = name => `; ${document.cookie}`.split(`; ${name}=`).pop().split(';').shift(),
  493. entrance = () => {
  494. let classId = encodeURIComponent($s['clazzid'] || $s['classid'] || $s['classId'] || $s['ClassId']),
  495. courseId = encodeURIComponent($s['courseid'] || $s['courseId']),
  496. cpi = encodeURIComponent($s['cpi'] || ''),
  497. courseName = encodeURIComponent($d.title.replace('-首页', ''));
  498.  
  499. $w.location.href = 'https://i.chaoxing.com/base/settings?classid=' + classId + '&courseid=' + courseId + '&cpi=' + cpi + '&coursename=' + courseName;
  500. };
  501. $uid = getCookie('UID')||getCookie('_uid'),
  502.  
  503. request = (data) => {
  504. return new Promise((success,fail)=>{
  505. if(data.method == undefined){
  506. data.method = 'get';
  507. }
  508. GM_xmlhttpRequest(data);
  509. });
  510. }
  511. if($l.includes('/mycourse/stu?')){
  512. let $ = $w.jQuery||$w.$,
  513. popElement = `
  514. <div class="popDiv course-pop">
  515. <div class="popHead">
  516. <a class="popClose fr" href="javascript:;">
  517. <img src="/mooc2-ans/images/popClose.png" class="closecoursepop" style="display: none;">
  518. </a>
  519. <p class="fl fs18 colorDeep">李硕提示你:该课程可以进行刷视频</p>
  520. </div>
  521. <div class="het60"></div>
  522. <div class="course-content-dialog">
  523. <ul class="course-details" tabindex="3" style="overflow: auto visible; outline: none;">
  524. <li>
  525. <div class="right-box">
  526. <div class="text-box">
  527. <p class="text1"> 欢迎使用李硕专刷视频脚本,祝您生活愉快!!!
  528. <div>
  529. <span class="blue-text">如有问题可点击刷视频界面或者学习通个人空间主页里的“遇到问题点击“ 按钮 </div>
  530. </p>
  531. <div>
  532. <span class="blue-text">💕💕我的好朋友们,让我们一起加油吧!!! ❤️❤️</div>
  533. </p>
  534. </div>
  535. </div>
  536. </li>
  537. </ul>
  538. <div style="height: 70px;"></div>
  539. <div class="bottom-div" style="">
  540. <div class="start-study" id="fuckme">开始刷课</div>
  541. &ensp;&ensp;&ensp;
  542. <div class="start-study" id="fuckyou">取消</div>
  543. </div>
  544. </div>
  545. </div>`;
  546. setTimeout(()=>{
  547. $(".coursenoticepop").empty();
  548. $(".coursenoticepop").html(popElement);
  549. $("#fuckme").click(function(){
  550. entrance($w.ServerHost.mooc1Domain.replace('https://','http://'))
  551. });
  552. $("#fuckyou").click(()=>{
  553. $(".closecoursepop").hide();
  554. $(".coursenoticepop").hide();
  555. });
  556. $(".closecoursepop").show();
  557. $(".coursenoticepop").show();
  558. },1000);
  559. }
  560.  
  561. })();
  562.