// ==UserScript== // @name 汕头大学自动看课脚本|如需全功能版本见:http://doc.zhanyc.cn // @version 1.0-free // @description 当前是免费版本,只包含了视频页面自动播放、解除播放暂停限制功能。如需自动下一集、自动换课程、秒过、考试答题、全自动无人值守高级功能可升级付费版本|接各类脚本开发、代挂工作,微信:zhanyc_cn 备用微信:zhanfengkuo 个人网站:http://doc.zhanyc.cn // @author zfk // @include *://*.5zk.com.cn/* // @include *://*.gdcxxy.net/* // @include *://m.zhanyc.cn/* // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @grant GM_deleteValue // @grant GM_setClipboard // @grant GM_registerMenuCommand // @grant window.close // @run-at document-end // @require http://libs.baidu.com/jquery/2.0.0/jquery.min.js // ==/UserScript== (function () { let $jq = $; unsafeWindow.$jq = $; const docUrl = "http://doc.zhanyc.cn"; let FREEJS = { pageData: { userNameIndex: null, confirmRunIndex: null, waitTime: 0, video: { index: null, }, }, async init() { console.log("%c FREEJS init", "background:rgb(0,0,0);color:#fff"); FREEJS.addFloatingPanel(); FREEJS.addStyle(); if (location.href.indexOf("loginSuccess.html?yh=") != -1) { console.log("%c loginSuccess.html?yh", "background:rgb(255,0,0);color:#fff"); return; } FREEJS.begin(); }, begin() { if (window === top) { FREEJS.addMenu(); } FREEJS.runByUrl(location.href); }, runByUrl(url) { if (url.includes("/jp_wiki_study") || url.includes("/wiki_study.php")) { FREEJS.page_video(); } else if (url.includes("/wiki_study_iframe_kt.php")) { FREEJS.page_wiki_study_iframe_kt(); } else if (url.includes("/zb_wiki_study.php")) { FREEJS.zb_wiki_study(); } else if (url.includes("/live.php")) { FREEJS.wk_live(); } }, async zb_wiki_study() { FREEJS.closeWaitConfrimWin() console.log("%c zb_wiki_study", "background:rgb(0,0,0);color:#fff"); let timeout = 2; let lastTime = null; let checkTimeTimesBak = 60; let checkTimeTimes = checkTimeTimesBak; FREEJS.closeWaitConfrimWin(); if (FREEJS.pageData.video.index != null) { return; } setTimeout(async () => { let time = FREEJS.getCurTime() await FREEJS.waitTimeout(5000) if (FREEJS.getCurTime() == time) { alert("貌似卡主了,请刷新页面重试"); } }, 60 * 1000); FREEJS.pageData.video.index = setInterval(async () => { try { if (FREEJS.pageData.waitTime > 0) { FREEJS.pageData.waitTime -= timeout; return; } if (!FREEJS.getVideo()) { console.log("%c FREEJS no video", "background:rgb(0,0,0);color:#fff"); return; } let curTime = FREEJS.getCurTime(); if (curTime == lastTime) { lastTime = FREEJS.getCurTime(); checkTimeTimes -= timeout; if (checkTimeTimes <= 0) { checkTimeTimes = checkTimeTimesBak; alert("貌似卡死了,请刷新页面重试"); FREEJS.pageData.waitTime = 10; return; } } else { lastTime = curTime; checkTimeTimes = checkTimeTimesBak; } FREEJS.getVideo().volume = 0; let cur = FREEJS.getCurTime().toFixed(0); let total = FREEJS.getTotalTime().toFixed(0); let title = `进度:${cur}/${total}`; $("title").text(title); FREEJS.updateProgress(cur, total); console.log("%c video run", "background:rgb(255,0,0);color:#fff"); let $tips = FREEJS.getElByText( ".layui-layer-content p", "您好,本平台要求实时在线学习,点击按钮,继续学习课程。" ); if ($tips != null) { $tips.parents(".layui-layer").find(".layui-layer-btn0")[0].click(); } let isFinish = await FREEJS.isPlayFinish(); if (isFinish) { FREEJS.pageData.waitTime = 15; FREEJS.tipsMsg("视频即将结束"); setTimeout(() => { if (FREEJS.pageData.video.index) { clearInterval(FREEJS.pageData.video.index); FREEJS.pageData.video.index = null; } }, 10 * 1000); return; } let isPlay = await FREEJS.videoIsPlay(); if (!isPlay) { if (!isFinish) { FREEJS.play(); } } } catch (e) { console.error("视频页面定时器出错", e); } }, timeout * 1000); }, async wk_live() { console.log("%c wk_live", "background:rgb(0,0,0);color:#fff"); FREEJS.closeWaitConfrimWin() await FREEJS.waitOf((a) => $(".block-content table tr").length > 0); await FREEJS.waitTimeout(1000) let $el = null; $(".block-content table tr").each((i, el) => { let $btn = FREEJS.getElByText($(el).find('a'), "查看直播回放") if ($btn == null) return true; let jd = Number($btn.parents('td:first').next().text().trim().replace('%', '')) if (jd < 100) { $el = $btn; return false; } }); if ($el == null) { FREEJS.tipsMsg("学习完成"); return; } FREEJS.confirmRun("3秒后执行下一步", 3000).then((a) => { $el[0].click(); }); }, async page_wiki_study_iframe_kt() { FREEJS.closeWaitConfrimWin() await FREEJS.waitOf((a) => FREEJS.getElByText($("button"), "提交答案") != null); await FREEJS.waitTimeout(1000); let answer = $("#resolve").text().trim().replace("正确答案:", ""); $(`label input[value='${answer}']`).click(); await FREEJS.waitTimeout(500); FREEJS.getElByText($("button"), "提交答案").click(); await FREEJS.waitTimeout(2000); FREEJS.tipsMsg("答题完毕,请手动提交"); }, async page_video() { console.log("%c page_video", "background:rgb(0,0,0);color:#fff"); FREEJS.closeWaitConfrimWin() let timeout = 2; await FREEJS.waitOf((a) => $("ul.list>li").length > 0); let $item = null; $("ul.list>li").each((i, el) => { if (/[\d:]+\/[\d:]+/.test($(el).text().trim())) { let jdTxt = $(el).text().trim().replace(/\s/g, '').replace(/.*\(([\d:]+\/[\d:]+)\).*/g, '$1') let jdTxtArr = jdTxt.split('/') if (jdTxtArr[0] == jdTxtArr[1]) { return true } $item = $(el); return false; } let $finishItem = $(el).find('a>span[style="color:#00A600;"]'); if ($finishItem.length == 0) { $item = $(el); return false; } }); if ($item == null) { FREEJS.tipsMsg("当前课程视频已经完成"); return; } else { if ($item.find('i.si-control-play').length == 0 && $item.find('[style="color:#00A600;"]').length == 0) { $item.find("a")[0].click() } } FREEJS.pageData.video.index = setInterval(async () => { try { if (FREEJS.pageData.waitTime > 0) { FREEJS.pageData.waitTime -= timeout; return; } let cur = FREEJS.getCurTime().toFixed(0); let total = FREEJS.getTotalTime().toFixed(0); let title = `进度:${cur}/${total}`; $("title").text(title); FREEJS.updateProgress(cur, total); console.log("%c video run", "background:rgb(255,0,0);color:#fff"); if ( FREEJS.getElByText( $("div"), "本章不需要进行课堂测试,请继续学习!", "endsWith" ) != null ) { FREEJS .getElByText( $("div"), "本章不需要进行课堂测试,请继续学习!", "endsWith" ) .parents(".layui-layer-dialog") .find("a.layui-layer-btn0")[0] .click(); } let isFinish = await FREEJS.isPlayFinish(); if (isFinish) { FREEJS.tipsMsg("视频即将结束"); FREEJS.pageData.waitTime = 15; if (FREEJS.pageData.video.index) { clearInterval(FREEJS.pageData.video.index); FREEJS.pageData.video.index = null; } return; } let isPlay = await FREEJS.videoIsPlay(); if (!isPlay) { if (!isFinish) { if ($("#tcaptcha_transform>visible").length == 0) { FREEJS.play(); } } } } catch (e) { console.error("视频页面定时器出错", e); } }, timeout * 1000); }, // ---- 悬浮引流面板 ---- addFloatingPanel() { let panelHtml = `