// ==UserScript== // @name 🍀双卫网|使用说明:http://doc.zhanyc.cn/course/ // @namespace free // @version 1.0 // @description 当前是免费版本,只包含了视频自动播放功能。如需自动下一集、自动换课程、考试答题等高级功能可升级付费版本|接各类脚本开发、代挂任务,微信:zhanyc_cn 个人网站:http://doc.zhanyc.cn // @include *://*sww.com.cn/* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_addStyle // @run-at document-end // @require http://libs.baidu.com/jquery/2.0.0/jquery.min.js // @antifeature payment // @license Creative Commons // ==/UserScript== (function () { let $jq = $; unsafeWindow.$jq = $; let docUrl = "http://doc.zhanyc.cn/pages/sww/"; let isDev = false; let freeObj = { pageData: { videoIndex: null, waitTime: 0, }, async init() { console.log("%c 免费版本 init", "background:rgb(0,0,0);color:#fff"); freeObj.showFloatingBox(); freeObj.runByUrl(location.href); }, async runByUrl(url) { if (url.includes("/studyVideo?")) { freeObj.page_video(); } else if (url.includes("/projectLog")) { freeObj.page_list(); } else if (url.includes("/projectDetail?")) { freeObj.page_projectDetail(); } else if (url.includes("/studyExam?")) { freeObj.page_exam(); } }, async page_list() { console.log("%c page_list", "background:rgb(0,0,0);color:#fff"); await freeObj.waitOf((a) => $(".wdkc-table tbody tr").length > 0); freeObj.showUpgradeTip("列表页面", "自动换课程、自动下一集"); }, async page_projectDetail() { console.log("%c page_projectDetail", "background:rgb(0,0,0);color:#fff"); await freeObj.waitOf((a) => $(".kecheng-list li").length > 0); freeObj.showUpgradeTip("课程详情页面", "自动进入课程学习、自动翻页"); }, async page_exam() { console.log("%c page_exam", "background:rgb(0,0,0);color:#fff"); freeObj.showUpgradeTip("答题页面", "自动答题、自动交卷"); }, async page_video() { console.log("%c page_video", "background:rgb(0,0,0);color:#fff"); if (freeObj.pageData.videoIndex != null) { return; } freeObj.pageData.videoIndex = setInterval(async () => { try { if (!freeObj.getVideo()) { console.log("%c no video", "background:rgb(0,0,0);color:#fff"); return; } if (freeObj.pageData.waitTime > 0) { freeObj.pageData.waitTime -= 1; return; } freeObj.getVideo().volume = 0; let curTime = freeObj.getCurTime(); let totalTime = freeObj.getTotalTime(); let title = `进度:${curTime.toFixed(0)}/${totalTime.toFixed(0)}`; $("title").text(title); freeObj.updateVideoProgress(curTime, totalTime); console.log("%c video run", "background:rgb(255,0,0);color:#fff"); let isFinish = freeObj.isPlayFinish(); if (isFinish) { freeObj.pageData.waitTime = 15; freeObj.showVideoFinishTip(); return; } let isPlay = await freeObj.videoIsPlay(); if (!isPlay && !isFinish) { freeObj.play(); } } catch (e) { console.error("视频页面定时器出错", e); } }, 1000); }, play() { freeObj.getVideo().volume = 0; setTimeout(() => { freeObj.getVideo().play(); }, 200); }, getVideo() { return $(".kejian-video video")[0]; }, getCurTime() { let res = 0; try { res = freeObj.getVideo().currentTime; } catch (e) { console.error(e); } return res; }, getTotalTime() { let res = 0; try { res = freeObj.getVideo().duration; } catch (e) { console.error(e); } return res; }, isPlayFinish() { try { return freeObj.getTotalTime() > 0 && freeObj.getCurTime() + 5 >= freeObj.getTotalTime(); } catch (e) { return false; } }, async videoIsPlay() { return new Promise((resolve) => { try { let curTime = freeObj.getCurTime(); setTimeout(() => { let time1 = freeObj.getCurTime(); let res = time1 > curTime; if (res) { setTimeout(() => { let time2 = freeObj.getCurTime(); let res2 = time2 > time1; resolve(res2); }, 100); } else { return resolve(false); } }, 100); } catch (e) { resolve(false); } }); }, showUpgradeTip(pageName, features) { let html = `