您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
智慧职教自动刷课,点击进入课程首页自动开始(播放视频第一次手动静音),可结合浏览器倍数插件一起使用(最好别超过1.5倍速)
当前为
// ==UserScript== // @name 职教云|智慧职教助手 // @namespace http://tampermonkey.net/ // @version 0.4.beta // @description 智慧职教自动刷课,点击进入课程首页自动开始(播放视频第一次手动静音),可结合浏览器倍数插件一起使用(最好别超过1.5倍速) // @author maple // @match https://zjy2.icve.com.cn/study/process/process.html* // @match https://zjy2.icve.com.cn/common/directory/directory.html* // @icon https://zjy2.icve.com.cn/common/images/logo.png // @grant none // ==/UserScript== /** * studyList 所有学习模块 * moduleList 未完成模块 * contentList 一个模块中的内容list */ class ZhiJaoCloud{ studyList = []; moduleList= []; contentList= []; //构造函数 constructor() { this.getStudyList(); } //找到元素 getStudyList(){ //没有过滤的学习列表 let studyList = document.getElementById("process_container"); //过滤之后的所有学习列表 this.studyList = studyList.getElementsByClassName("moduleList"); } //判断模块是否完成100% isFinish(module){ //获取每一个模块的进度条 let bar = module.getElementsByTagName("div"); //100%完成度返回true if (" 100% " === (bar[2].innerHTML)){ return true; } return false; } //打开列表框(未完成的才打开,并添加到module未完成模块中去) openList(){ for (let i=0;i<this.studyList.length;i++){ //返回false在取反才打开(未完成) if (!this.isFinish(this.studyList[i])){ //将未完成的模块添加到moduleList中 this.moduleList.push(this.studyList[i]); let status = this.studyList[i].getElementsByClassName("topic_container")[0].style.display; //console.log("可见状态为:"+status); //没有展开才展开(状态不可见) if ("block"!==status){ //点击模块的三角箭头,【展开模块目录】 this.studyList[i].getElementsByTagName("span")[1].click(); //只点击一个 break; } } } } //展开进度 openSection(module){ console.log("模块为:") console.log(module) let content; try{ content = module.getElementsByClassName("topic_container")[0]; }catch (e){ console.log("模块打开错误异常调试"); console.log(this.moduleList) console.log(module); console.log(content); } //模块的下一级目录(table,为了使后面的内容能够点击) let trList = content.getElementsByTagName("tr"); for (let i = 2; i < trList.length; i++) { if (i%2===1){ //console.log(trList[i]) this.contentList.push(trList[i]); } } this.loop(module); } loop(module){ for (let i = 0; i < this.contentList.length; i++) { console.log("loop") //点击展开任务目录 this.contentList[i].click(); this.start(module); } } start(module){ //一个模块的所有章节 let section_all = module.getElementsByClassName("topic_container")[0]; //章节目录(需要上面点击之后才能显示(block))()所有章节的div列表 let divList = section_all.getElementsByClassName("sh-toc-list"); //延时,等待dom加载 sleep(2000).then(() => { for (let i = 0; i < divList.length; i++) { let flog = false; let div = divList[i].getElementsByClassName("sh-res-h am-margin-top-xs"); for (let i = 0; i < div.length; i++) { //有a标签才是内容,不然有可能是文件夹 if (div[i].getElementsByTagName("a").length!==0){ //最小可点击单位(学习内容) //console.log(div[i]) let span = div[i].getElementsByTagName("span")[0]; //获取不到title //span是内容标签的第一个 //console.log(span) console.log("学习进度:"+span.title); if (span.title!=="100%" && span.title!==undefined && span.title!==""){ //点击进入观看页面 div[i].click(); //本页面结束 this.end(); flog = true; break; } } } if (flog){ console.log("flog") break; } } }) } end(){ sleep(3000).then(() => { debugger; }) } //入口 main(){ this.openList(); console.log("open") //延迟,等待模块列表加载 sleep(1000).then(() => { console.log("sleep") this.openSection(this.moduleList[0]); // 只打开第一个模块的列表 }) } } class Look { //视频进度 schedule = "0"; //处理学习时候的上次学习提示 Hint(){ let link = document.getElementsByClassName("link"); if (link.length===0){ //没有弹出提示 console.log("2.hint"); return; } //点击本次的学习记录 link[1].getElementsByTagName("a")[0].click(); } //控制器(对于ppt,文档,视频做出不同的操作) controller(){ //文档 if (document.getElementsByClassName("swiper-pagination-current")[0]){ console.log("当前观看的为文档"); return 0; }else if(document.getElementsByClassName("stage-next-btn")[0]){ console.log("当前观看的为ppt"); return 1; }else if(document.getElementsByClassName("MPreview-arrowBottom")[0]){ //另一种ppt console.log("当前观看的为ppt(无特效)"); return 2; }else if (typeof(this.getSchedule())!=="error"){ console.log("当前观看的为视频"); return 3; }else { console.log("出错") } } //控制器之后执行 execute(status){ switch (status) { case 0: //文档 this.clickNext(this.getClickNum()); break; case 1: //ppt this.ppt(); break; case 2: //ppt(没有特效) this.ppt_(); break; case 3: //视频 setInterval(this.video,1000); break; default: console.log("出错1") } } //处理视频 video(){ this.schedule = getSchedule(); if(this.schedule!=="100%" ){ console.log("观看进度:"+getSchedule()) except(); /*//视频未播放(鼠标移动到视频中点击中心,播放) if (this.schedule===this.schedule) { /!* //能进条件,但是不能播放视频 !!!!!!!!!! let video = $(".jw-video"); video.mouseover(); video.click(); this.schedule = "0";*!/ //(视频未播放直接返回课程首页) this.backUp(); }*/ }else { backUp(); } } //处理ppt ppt() { for (let i = 1; i <= 350; i++) { sleep(20*i).then(() => { //图片下一张按钮 let next = document.getElementsByClassName("stage-next-btn")[0]; console.log("点击:"+i); next.click(); }) } console.log("等待") //等待一分钟 sleep(60000).then(() => { console.log("开始") debugger; this.backUp(); }) } //处理没有特效的ppt ppt_(){ let imgNum_ = null for (let i = 1; i <= 200; i++) { let next = document.getElementsByClassName("MPreview-arrowBottom")[0]; //获取当前的图片数 let imgNum = document.getElementsByName("newlyPicNum")[0].value; console.log("点击"+i); next.click(); //点击之后如果等于点击之前,就说明刷完了 (break) if (imgNum_===imgNum){ console.log("ppt_break") break; }else imgNum_ = imgNum } console.log("等待") //等待一分钟 sleep(60000).then(() => { console.log("开始") this.backUp(); }) } //获取视频进度 getSchedule(){ try { let bar = document.querySelector(".jw-progress"); return bar.style.width; }catch (e){ return "error"; } } //获取需要点击多少次图片(处理文档) getClickNum(){ //当前图片页数 let current = document.getElementsByClassName("swiper-pagination-current")[0].innerHTML; //所有图片页数 let all = document.getElementsByClassName("swiper-pagination-total")[0].innerHTML; console.log("需要点击"+(all-current+1)+"次") //返回点击次数 return all-current+1; } //点击下一张图片(处理文档) clickNext(num){ console.log("4.num") let div = document.getElementsByClassName("swiper-button-next"); for (let i = 1; i <= num+1; i++) { sleep(2000*i).then(() => { console.log("5.click"); div[0].click(); if (i===num+1){ this.backUp(); } }) } } //点击后退,返回课程首页 backUp(){ let back = document.getElementsByClassName("np-menu-nav-li")[0]; back.getElementsByTagName("a")[0].click(); } main(){ console.log("1.Look main") this.Hint(); //控制器 let status = this.controller(); this.execute(status); } } //延时函数 function sleep (time) { return new Promise((resolve) => setTimeout(resolve, time)); } //获取视频进度 function getSchedule(){ try { let bar = document.querySelector(".jw-progress"); return bar.style.width; }catch (e){ return "error"; } } //学习异常弹窗 function except(){ //找到异常按钮a标签 let a = document.getElementsByClassName("sgBtn ok")[0]; //异常按钮存在就点击 if (a !== undefined && a !== null){ console.log(a); a.click(); }else{ //console.log("无异常") } } //点击后退,返回课程首页 function backUp(){ let back = document.getElementsByClassName("np-menu-nav-li")[0]; back.getElementsByTagName("a")[0].click(); } //=========================================================(main)============================================================ //包含字符串(是课程首页) let url = 'https://zjy2.icve.com.cn/study/process/process.html?' if (document.URL.indexOf(url)!==-1){ console.log("开始等待目录加载") //首页需要加载完毕之后执行(使用onload有问题) sleep(5000).then(()=>{ console.log("load完毕") //创建脚本对象,调用main方法 let cloud = new ZhiJaoCloud(); cloud.main(); }) }else{ console.log("开始等待") sleep(5000).then(()=>{ console.clear(); console.log("开始执行") //观看视频或者图片 let look = new Look(); look.main(); }) console.log("结束") }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址