您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
支持自动访问线上链接、查看资料附件、观看视频、自动查看页面、自动参与发帖回帖。调用内部接口实现!【做题进群:756253160联系群主】
// ==UserScript== // @name 新国开/国家开放大学/一网一免费自动刷课(不答题不考试,答题/考试找群主处理) // @namespace 一心向善 // @description 支持自动访问线上链接、查看资料附件、观看视频、自动查看页面、自动参与发帖回帖。调用内部接口实现!【做题进群:756253160联系群主】 // @version 20231019 // @author 一心向善 // @icon data:image/png;base64,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 // @match *://lms.ouchn.cn/course/* // @original-author 一心向善 // @original-license GPL-1.0 // @original-script http://one.ouchn.cn/ // @license GPL-1.0 // @source http://one.ouchn.cn/ // @note 1.1.2:修复发帖功能无法使用的BUG // ==/UserScript== (()=>{"use strict";var e={668:(e,n,t)=>{t.r(n),t.d(n,{addLearningBehavior:()=>r,addVideoLearningRecords:()=>i,getActivities:()=>p,getActivityReadsForUser:()=>s,getCategoryId:()=>d,postActivitiesRead:()=>l,postForum:()=>c,postLearningActiVities:()=>a});const o=new(t(743).GlobalData);function r(e,n){const t=Math.ceil(300*Math.random()+40),r=JSON.stringify({activity_id:e,activity_type:n,browser:"chrome",course_id:o.course.id,course_code:o.course.courseCode,course_name:o.course.name,org_id:o.course.orgId,org_name:o.user.orgName,org_code:o.user.orgCode,dep_id:o.dept.id,dep_name:o.dept.name,dep_code:o.dept.code,user_agent:window.navigator.userAgent,user_id:o.user.id,user_name:o.user.name,user_no:o.user.userNo,visit_duration:t});return new Promise(((e,n)=>{$.ajax({url:"https://lms.ouchn.cn/statistics/api/user-visits",data:r,type:"POST",cache:!1,contentType:"text/plain;charset=UTF-8",complete:e,error:n})}))}function i({start_at:e,end_at:n,syllabus_id:t,activity_id:r,upload_id:i}){const a=Math.ceil(300*Math.random()+40),s=JSON.stringify({syllabus_id:t,activity_id:r,upload_id:i,start_at:e,end_at:n,duration:a,user_id:o.user.id,org_id:o.user.orgId,course_id:o.course.id,is_teacher:!1,is_student:!0,ts:Date.now(),user_agent:window.navigator.userAgent,meeting_type:"online_video",org_name:o.user.orgName,org_code:o.course.orgCode,user_no:o.user.userNo,user_name:o.user.name,course_code:o.course.courseCode,course_name:o.course.name});return new Promise(((e,n)=>{$.ajax({url:"https://lms.ouchn.cn/statistics/api/online-videos",data:s,type:"POST",cache:!1,contentType:"text/plain;charset=UTF-8",complete:e})}))}function a({activity_id:e,activity_type:n,is_open:t,activity_name:r=null}){const i=JSON.stringify({org_id:o.user.orgId,user_id:o.user.id,course_id:o.course.id,enrollment_role:o.courseRoles[0],is_teacher:!1,activity_id:e,activity_type:n,activity_name:r,module:null,action:t?"open":"close",ts:(new Date).getTime(),user_agent:void 0===typeof window?"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36":window.navigator.userAgent,mode:"normal",channel:"web",target_info:{},master_course_id:o.course.id,org_name:o.user.name,org_code:o.user.orgCode,user_no:o.user.userNo,user_name:o.user.name,course_code:o.course.courseCode,course_name:o.course.name,dep_id:o.dept.id,dep_name:o.dept.name,dep_code:o.dept.code});return new Promise(((e,n)=>$.ajax({url:"https://lms.ouchn.cn/statistics/api/learning-activity",data:i,type:"POST",contentType:"application/json",dataType:"JSON",success:e,error:n})))}function s(){return new Promise(((e,n)=>$.ajax({url:"https://lms.ouchn.cn/api/course/104181/activity-reads-for-user",type:"GET"})))}function c(e,{title:n,content:t}={title:`好好学习${Date.now()}`,content:`<p>好好学习,天天向上。${Date.now()}</p>`}){return new Promise(((o,r)=>$.ajax({type:"POST",url:"https://lms.ouchn.cn/api/topics",contentType:"application/json",dataType:"JSON",data:JSON.stringify({title:n,content:t,category_id:e,uploads:[]}),success:o,error:r})))}function l(e,n={}){return new Promise(((t,o)=>$.ajax({type:"POST",url:`https://lms.ouchn.cn/api/course/activities-read/${e}`,contentType:"application/json",dataType:"JSON",data:JSON.stringify(n),success:t,error:o})))}function d(e){return new Promise((n=>$.get(`https://lms.ouchn.cn/api/forum/${e}/category?fields=id`,{},n)))}function p(e){const n=`https://lms.ouchn.cn/api/activities/${e}`;return new Promise(((e,t)=>$.ajax({url:n,type:"GET",success:e,error:t})))}},743:(e,n,t)=>{t.r(n),t.d(n,{GlobalData:()=>o,notificationTypesAndText:()=>r});class o{course={id:9999,name:"课程名称",orgId:0,orgName:"xx开放大学",orgCode:"000",courseCode:"999",endDate:"None",enableFaceService:"",isSimulatingInstructor:!1,isInstructorView:!1,isMaster:!1};user={id:99999,name:"马牛逼",userNo:"224499999999",orgId:0,mobile:"12345678910",orgName:"xx开放大学",orgCode:"000",isCourseAdmin:!1};dept={id:"9999",name:"xx技师分校",code:"1231234"};isOpenUniversity=!0;courseRoles=["student"];deliveryOrg="ouchn";useSinglePage=!0;expandActivityInfo=!1;constructor(){this.course=globalThis.globalData.course,this.user=globalThis.globalData.user,this.dept=globalThis.globalData.dept,this.isOpenUniversity=globalThis.globalData.isOpenUniversity,this.courseRoles=globalThis.globalData.courseRoles,this.deliveryOrg=globalThis.globalData.deliveryOrg,this.useSinglePage=globalThis.globalData.useSinglePage,this.expandActivityInfo=globalThis.globalData.expandActivityInfo}}const r={material:"参考资料",web_link:"线上链接",online_video:"音视频教材",slide:"微课",lesson:"录播教材",homework:"作业",forum:"讨论区",chatroom:"iSlide 直播",questionnaire:"调查问卷",page:"页面",course_invite:"課程邀請",scorm:"SCORM"}}},n={};function t(o){var r=n[o];if(void 0!==r)return r.exports;var i=n[o]={exports:{}};return e[o](i,i.exports,t),i.exports}t.d=(e,n)=>{for(var o in n)t.o(n,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:n[o]})},t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{function e(){if(null==document.querySelector("container-element")){$(".wrapper").append(this.el_text);const e=document.querySelector("container-element");e.onmousedown=function(n){let t=window.event||n,o=t.clientX-e.offsetLeft,r=t.clientY-e.offsetTop;console.log(t),console.log(r),document.onmousemove=function(n){let t=window.event||n;e.style.left=t.clientX-o+"px",e.style.top=t.clientY-r+"px"},document.onmouseup=function(){document.onmousemove=null,document.onmouseup=null}}}}e.prototype={constructor:e,el_text:'\n<container-element class="normal"\n style="left: 10px; top: 50px; font: 14px Menlo, Monaco, Consolas, \'Courier New\', monospace;">\n <style>\n /** 默认字体 */\n /** 输入框默认边距 */\n ul,\n ol {\n padding-left: 16px;\n margin: 0px;\n }\n\n a {\n color: #1890ff;\n }\n\n hr {\n border-style: solid;\n border-color: #63636346;\n border-width: 0px;\n border-bottom: 1px solid #63636346;\n margin-block-start: 1em;\n margin-block-end: 1em;\n }\n\n container-element.close {\n display: none;\n }\n\n container-element.minimize {\n min-width: unset;\n }\n\n container-element {\n position: fixed;\n top: 10%;\n left: 10%;\n z-index: 9999999999;\n text-align: left;\n min-width: 300px;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: #636363;\n box-shadow: 0 0 24px -12px #3f3f3f;\n border-radius: 8px;\n }\n\n container-element .header {\n display: flex;\n align-items: center;\n background-color: white;\n border-radius: 8px 8px 0px 0px;\n user-select: none;\n padding: 4px;\n color: #000;\n line-height: normal;\n height: auto;\n position: static;\n }\n\n container-element .header .profile {\n flex: 1;\n cursor: move;\n }\n\n container-element .header .switch:hover,\n container-element .header .dropdown:hover {\n background-color: #f3f3f3;\n }\n\n container-element .header .close:hover {\n background-color: #ff000038;\n }\n\n container-element .header .switch,\n container-element .header .close {\n cursor: pointer;\n }\n\n container-element .header .dropdown {\n line-height: 24px;\n }\n\n container-element .header .switch,\n container-element .header .close,\n container-element .header .profile {\n display: inline-flex;\n align-items: center;\n padding: 0px 8px;\n }\n\n container-element .logo {\n width: 18px;\n height: 18px;\n cursor: pointer;\n }\n\n\n\n container-element .body {\n overflow: auto;\n width: auto;\n height: 100%;\n }\n\n script-panel-element {\n display: block;\n background-color: white;\n border-radius: 0px 0px 8px 8px;\n padding: 0px 8px 12px 8px;\n resize: vertical;\n overflow: auto;\n\n }\n\n script-panel-element .script-panel-body {\n padding: 0px 8px;\n }\n\n script-panel-element+script-panel-element {\n margin-top: 12px;\n }\n\n container-element .card+.card {\n margin-top: 12px;\n }\n\n\n container-element .card {\n background-color: white;\n border-radius: 2px;\n padding: 0px 8px;\n border: none;\n }\n\n container-element .separator {\n display: flex;\n align-items: center;\n text-align: center;\n padding-bottom: 4px;\n }\n\n container-element .separator::before,\n container-element .separator::after {\n content: \'\';\n flex: 1;\n border-bottom: 1px solid #63636346;\n }\n\n\n container-element .console {\n max-height: 300px;\n max-width: 400px;\n overflow: auto;\n background-color: #292929;\n padding: 12px 6px;\n color: #ececec;\n font-size: 12px;\n }\n\n container-element .console .item {\n padding: 3px 0px;\n border-radius: 2px;\n }\n\n container-element .console .item .time {\n color: #757575;\n }\n\n container-element .console .item .info {\n background-color: #2196f3a3;\n }\n\n container-element .console .item .warn {\n background-color: #ffc107db;\n }\n\n container-element .console .item .error {\n background-color: #f36c71cc;\n }\n\n container-element .console .item .debug,\n container-element .console .item .log {\n background-color: #9e9e9ec4;\n }\n\n container-element .console *::selection {\n background-color: #ffffff6b;\n }\n\n /* 设置滚动条的样式 */\n container-element ::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n }\n\n /* 滚动槽 */\n container-element ::-webkit-scrollbar-track {\n background: #ffffffd8;\n border-radius: 4px;\n margin: 4px;\n }\n\n /* 滚动条滑块 */\n container-element ::-webkit-scrollbar-thumb {\n border-radius: 4px;\n background: rgba(0, 0, 0, 0.253);\n box-shadow: inset006pxrgba(0, 0, 0, 0.3);\n }\n .footer {\n text-align: center;\n }\n .footer a {\n text-decoration: none;\n }\n </style>\n <div class="message-container"></div><header-element class="header" data-title="菜单栏-可拖动区域">\n <div class="profile" data-title="菜单栏(可拖动区域)">日志输出</div>\n </header-element>\n <div class="body" style="max-height: 294px; max-width: 1870px;"><script-panel-element>\n <div class="separator">📄 日志输出</div>\n <div class="notes card"></div>\n <div class="configs card">\n <div class="configs-body"></div>\n </div>\n <div class="script-panel-body">\n <div class="card console">\n\n </div>\n </div>\n </script-panel-element></div>\n <div class="footer">\n <a id="startTech" href="javascript:void(0);">亲亲的用鼠标点我开始刷课</a>\n </div>\n</container-element>\n ',WriteHtmlLine:(e,n=!1,t={borderTop:!1,borderBottom:!1})=>{const o=globalThis.document;if(void 0===o)throw new Error("document = undefined error!");const r=o.createElement("div"),i=o.querySelector("container-element");r.classList.add("item"),n&&(r.style.textAlign="center"),t.borderTop&&(r.style.borderTop="1px solid #767676"),t.borderBottom&&(r.style.borderBottom="1px solid #767676");const a=i.querySelector(".body"),s=i.querySelector(".console");s.appendChild(r),r.innerHTML=e;const c=[...e.matchAll(/<span class=\"(.+)\">(.+)<\/span>/g)][0];if(void 0===c)console.log("\n"+e);else{e=e.replace(/<span class=\"(.+)\">(.+)<\/span>/g,`<br> <span class="${c[1]}">${c[2]}</span>`),r.innerHTML=e,e=(e=e.replace(/<span class=\"(.+)\">(.+)<\/span>/gm,"%c"+c[2])).replace(/<br>/gm,"\n");let n="#757575";switch(c[1]){case"info":n="#2196f3a3";break;case"warn":n="#ffc107db";break;case"error":n="#f36c71cc";break;case"debug":case"log":n="#9e9e9ec4"}a.scrollTop=a.scrollHeight,s.scrollTop=s.scrollHeight,console.log("\n"+e,`color: #fff; background: ${n}; padding: 3px 2px; border-radius: 3px;`)}return r}};const n=t(668),{notificationTypesAndText:o}=t(743),r=new e,i=async e=>new Promise((async n=>{const t=r.WriteHtmlLine(`随机延迟: ${parseInt(e/1e3)} 秒 还剩: ${parseInt(e/1e3)} 秒`,!0);let o=0;setTimeout(n,e);let i=setInterval((()=>{o++,t.innerHTML=`随机延迟: ${parseInt(e/1e3)} 秒 还剩: ${parseInt(e/1e3)-o} 秒`,o>=parseInt(e/1e3)&&clearInterval(i)}),1e3)}));$("#startTech").on({click:function(){!async function(e){r.WriteHtmlLine("===== 初始化中【交流群:756253160】 =====",!0,{borderBottom:!0});const t=e=>null==e||""==e?"无":e,a=performance.now(),s=await new Promise((n=>$.get(`https://lms.ouchn.cn/api/course/${e}/my-completeness`,((e,t,o)=>"success"===t?n(e):{study_completeness:void 0})))),{study_completeness:c}=s,l=await new Promise((n=>$.get(`https://lms.ouchn.cn/api/courses/${e}/modules`,((e,t,o)=>"success"===t?n(e):{modules:[]})))),{modules:d}=l,p=s.completed_result.completed.learning_activity;for(let a of d){let s=parseInt(1e3*(5*Math.random()+8));await i(s),r.WriteHtmlLine(`课程模块:${a.name}(${a.id}) 当前进度${c}% 随机延迟: <span class="time">${s}毫秒</span>`,!0,{borderBottom:!0});const l=await new Promise((n=>$.get(`https://lms.ouchn.cn/api/course/${e}/all-activities?module_ids=[${a.id}]&activity_types=learning_activities,exams,classrooms`,((e,t,o)=>"success"===t?n(e):{learning_activities:[]})))),{learning_activities:d}=l;try{for(const e of d){const{completion_criterion:c,title:l,id:d,uploads:u,syllabus_id:m,is_open:g,type:h}=e;if(-1===p.indexOf(parseInt(d)))switch(r.WriteHtmlLine(`课程模块:${a.name} 模块标题:${l}(${o[h]}) 完成标准:${t(c)}(${d}) <span class="log">任务开始</span>`,!1,{borderBottom:!0}),"online_video"===h?await i(s):await i(3e3),await n.postLearningActiVities(d,h,g),await i(s/2),h){case"page":n.postActivitiesRead(d).then((()=>r.WriteHtmlLine(`模块标题:${l}(${o[h]}) 完成标准:${t(c)} <span class="info">完成</span>`))).catch((()=>r.WriteHtmlLine(`模块标题:${l}(${o[h]}) 完成标准:${t(c)} <span class="error">失败</span>`)));break;case"online_video":for(const e of u)for(const i of e.videos)await Promise.all([n.postActivitiesRead(d),n.addVideoLearningRecords({syllabus_id:m,activity_id:d,upload_id:e.id,start_at:0,end_at:i.duration}),n.postActivitiesRead(d,{start:0,end:i.duration})]).then((()=>r.WriteHtmlLine(`模块标题:${l}(${o[h]}) 完成标准:${t(c)} <span class="info">完成</span>`))).catch((()=>r.WriteHtmlLine(`模块标题:${l}(${o[h]}) 完成标准:${t(c)} <span class="error">失败</span>`)));break;case"material":for(const e of u)n.postActivitiesRead(d,{upload_id:e.id}).then((()=>r.WriteHtmlLine(`模块标题:${l}(${o[h]}) 完成标准:${t(c)} <span class="info">完成</span>`))).catch((()=>r.WriteHtmlLine(`模块标题:${l}(${o[h]}) 完成标准:${t(c)} <span class="error">失败</span>`)));break;case"forum":const{topic_category:{id:i}}=await n.getCategoryId(d);n.postForum(i).then((()=>r.WriteHtmlLine(`模块标题:${l}(${o[h]}) 完成标准:${t(c)} <span class="info">完成</span>`))).catch((()=>r.WriteHtmlLine(`模块标题:${l}(${o[h]}) 完成标准:${t(c)} <span class="error">失败</span>`)));break;case"web_link":r.WriteHtmlLine(`模块标题:${l}(${o[h]}) 完成标准:${t(c)} <span class="info">完成</span>`),await n.postActivitiesRead(d);break;default:r.WriteHtmlLine(`模块标题:${e.title}(${o[h]}) 完成标准:${t(c)} <span class="warn">未完成</span> <br> 该任务无法完成。`)}else r.WriteHtmlLine(`课程模块:${a.name} 模块标题:${l}(${o[h]}) 完成标准:${t(c)}(${d}) <span class="info">已完成 跳过</span>`,!1,{borderBottom:!0})}}catch(e){r.WriteHtmlLine('<span class="error">代码出现了异常 按F12在控制台查看错误。</span>',!0,{borderBottom:!0}),console.error(e),await new Promise((e=>setTimeout(e,s)))}r.WriteHtmlLine(`课程模块:${a.name}(${a.id}) 随机延迟: <span class="time">${s}毫秒</span>`,!0,{borderBottom:!0})}const u=await new Promise((n=>$.get(`https://lms.ouchn.cn/api/course/${e}/my-completeness`,((e,t,o)=>"success"===t?n(e):{study_completeness:void 0})))),{study_completeness:m}=u,g=performance.now();r.WriteHtmlLine(`学习前进度:${c}% 学习后进度:${m}% 耗时: <span class="time">${((g-a)/1e3).toFixed(2)}秒</span>`)}(document.querySelector("#courseId").value),this.onclick=null,this.style.cursor="no-drop",this.style.color="#ccc"}})})()})();