// ==UserScript== // @name 🥇【好医生小助手】无人值守|自动静音|视频助手|考试助手|解禁调试 // @namespace http://tampermonkey.net/ // @version 1.0.3 // @description ❌倍速播放✅屏蔽广告✅解禁调试✅视频助手✅考试助手(遍历试错)✅双模选择:只看不考、全看遂考🚑如果你想对脚本表示肯定或意见,可以通过赞赏码备注;如果要与我反复交流,则需移步到下载本脚本的页面,在“反馈”区留下意见或直接私信我。 // @author 境界程序员 // @license AGPL License // @match https://www.cmechina.net/cme/* // @match https://www.cmechina.net/cme/exam.jsp* // @match https://www.cmechina.net/cme/examQuizFail* // @match https://www.cmechina.net/cme/examQuizPass* // @match https://www.cmechina.net/cme/course.jsp?course_id* // @match https://www.cmechina.net/pub/tongzhi.jsp* // @match https://www.cmechina.net/webcam/ewmface2.jsp* // @grant GM_setValue // @grant GM_getValue // @run-at document-idle // @grant unsafeWindow // @antifeature Donate听说含捐赠功能需要添加此代码(无任何作用) // @downloadURL none // ==/UserScript== //更新历史 //■2024.7.8放大人脸识别二维码,方便用户扫描,并提示二维码过期 //■2024.5.31根据平台要求修改答题逻辑 //■2023.12.1创建脚本,支持视频学习及自动考试 (function () { var url = window.location.href; advis();//广告和操作平台 if (url.indexOf("https://www.cmechina.net/cme/polyv") != -1 || url.indexOf("https://www.cmechina.net/cme/study2.jsp") != -1) { console.log("进入好医生课程"); window.onload = function () { // 移除右键菜单禁用 document.oncontextmenu = null; // 移除F12禁用 document.onkeydown = null; document.onkeyup = null; document.onkeypress = null; var infoold = console.info;//保存以前的console.info以防万一 console.info = function () { };//禁止提示错误信息 console.clear = function () { };//禁止清空控制台 try { var kecheng = document.querySelector("ul[id='s_r_ml']").querySelectorAll("li"); } catch (e) { var kecheng = document.querySelector("ul[id='s_r_ml']").querySelectorAll("li"); }; let i = 0; while (i < kecheng.length) { if (kecheng[i].outerText.includes("未学习") == true && kecheng[i].className != "active") { console.log(kecheng[i].outerText.replace("未学习", "")); window.s2j_onPlayerInitOver = function () {//PV视频加载完毕 setTimeout(function () { try { //document.querySelector("video").muted = true; cc_js_Player.play(); cc_js_Player.setVolume(0); console.log("运行了这个事件"); } catch (error) { document.querySelector("video").play();//传统意义找播放器播放视频 document.querySelector("video").muted = true; }; }, 1000);//延迟1秒操作,为网页留点时间 }; setTimeout(function () { setInterval(function () { counttime(); }, 10000); kecheng[i].querySelector("a").click();//点击第一个没有播放的视频 }, 4000);//延迟4秒,避免网页还没打开 break; } else if (kecheng[i].outerText.includes("未学习") == true && kecheng[i].className == "active") { console.log(kecheng[i].outerText.replace("未学习", "")); //document.querySelector("video[class='pv-video']").play();//播放视频 //document.querySelector("video").play();//播放视频 cc_js_Player.play(); setTimeout(function () { cc_js_Player.setVolume(0); // document.querySelector("video").muted = true; // document.querySelector("video").volume = 0; }, 300); setInterval(function () { counttime(); }, 10000); break; }; //clearInterval(intervalid); if (i == kecheng.length - 1) { if (localStorage.getItem("mode") == "2") { setTimeout(function () { document.querySelector("a[class='cur']").click(); }, 2000); } else { alert("已经完成全部学习,请自行考试"); }; }; i++; }; function counttime() { var currenttime = parseInt(cc_js_Player.getPosition()); var duration = parseInt(cc_js_Player.getDuration()); var percent = ((currenttime / duration) * 100).toFixed(2) + "%"; if (currenttime == duration) { console.log("已播放" + percent); location.reload(); } else { console.log("已播放" + percent); cc_js_Player.play(); cc_js_Player.setVolume(0); // document.querySelector("video").play();//播放视频 // document.querySelector("video").muted = true; // document.querySelector("video").volume = 0; }; }; }; } else if (url.indexOf("https://www.cmechina.net/cme/exam.jsp") != -1) { //这里是考试页面 let timu = document.querySelectorAll("li");//获取全部考题和选项 var cishu = localStorage.getItem("cishu"); var answer = localStorage.getItem("Answer"); console.log("提取的答案" + answer); console.log("次数:" + cishu) var i = 0;//用于遍历题号 var j = 0;//用于遍历选项 while (i < timu.length) { if (answer === null) { if (document.querySelectorAll("li")[i].innerText.indexOf("多选") != -1) {//如果是多选题,则全选(虽然不完美) document.querySelectorAll("li")[i].querySelectorAll("input[type='checkbox']").forEach(function (checkbox) { checkbox.checked = true; }); } else { document.querySelectorAll("li")[i].querySelectorAll("input[type='radio']")[0].click();//如果是空的,那么全部选A localStorage.setItem("cishu", 1);//恢复第一次作答 }; } else { answer = answer.toString().split(","); if (document.querySelectorAll("li")[i].innerText.indexOf("多选") != -1) {//如果是多选题,则全选(虽然不完美) document.querySelectorAll("li")[i].querySelectorAll("input[type='checkbox']").forEach(function (checkbox) { checkbox.checked = true; }); } else { try { document.querySelectorAll("li")[i].querySelectorAll("input[type='radio']")[thxx(answer[j])].click();//如果不是多选 } catch (error) { document.querySelectorAll("li")[i].querySelectorAll("input[type='radio']")[0].click();//如果答案没有E,会出现错误,错误的话重新选A }; }; localStorage.setItem("cishu", parseInt(cishu) + 1);//恢复第一次作答 }; i++; j++; if (cishu > 5) { cleanKeyStorage();//次数大于说明题目乱了,要重新从A开始选择 localStorage.setItem("cishu", 1);//恢复第一次作答 }; }; setTimeout(function () { document.querySelector("a[id='tjkj']").click();//提交答案按钮 }, 500); } else if (url.indexOf("https://www.cmechina.net/cme/examQuizFail") != -1) { //答题失败了 const extractedList = url.match(/error_order=([0-9,]+)/)[1].split(",");//错题列表 console.log("错题题号" + extractedList); // 输出: ["1", "2", "4", "5"] const ansList = url.match(/ansList=([^&]+)/)[1].split(",");//答案列表 console.log("原本的答案" + ansList)//输出["A","B","C","D","E"]全部题目答案 var i = 0; while (i < extractedList.length) { ansList[parseInt(extractedList[i]) - 1] = fthxx(parseInt(thxx(ansList[parseInt(extractedList[i]) - 1])) + 1);//将错题A转换为数字1,代表待会儿选B i++; }; localStorage.setItem("Answer", ansList);//存储答案 console.log("存储的答案" + ansList); setTimeout(function () { document.querySelector("a[id='cxdt']").click();//重新答题 }, 500); } else if (url.indexOf("https://www.cmechina.net/cme/examQuizPass") != -1) { //答题成功 cleanKeyStorage(); setTimeout(function () { document.querySelector("div[class='show_exam_btns']").querySelector("a").click();//调到下一个章节的考试 }, 2000); } else if (url.indexOf("https://www.cmechina.net/cme/course.jsp?course_id") != -1) { try { document.querySelector("i[class='fa fa-circle-o']").click()//课程页面点击未学习的进入 } catch (error) { if (localStorage.getItem("mode") == "2") { document.querySelector("i[class='fa fa-adjust']").click();//课程页面点击要考试的进入 }; }; } else if (url.indexOf("https://www.cmechina.net/pub/tongzhi.jsp") != -1) { //网站的广告通知,直接给他点掉。 setTimeout(function () { try { document.querySelector("a[class='newBtn']").click(); } catch (error) { console.log("没有找到推广通知"); }; }, 1000); } else if (url.indexOf("https://www.cmechina.net/cme/index.jsp") != -1) { setTimeout(function () { try { document.querySelector("div[class='close2']").click(); } catch (error) { console.log("没有找到首页广告"); }; }, 1000); } else if (url.indexOf("https://www.cmechina.net/webcam/ewmface2.jsp") != -1) { console.log("二维码页面"); var code = setInterval(function () { document.querySelector("div[id='wx_pay_ewm']").querySelector("canvas").style = "position:relative;left:-60px;top:-100px;height:300px;width:300px"; if (document.querySelector("div[id='wx_pay_ewm']").querySelector("canvas").style["height"] == "300px") { clearInterval(code); }; }, 100); setTimeout(function () { let nihao = document.createElement("div"); nihao.innerText = "二维码已失效,点此刷新"; nihao.style = "position:relative;top:-270px;left:-35px;width:250px;font-size:22px;text-align:left;color: #ff0000;font-weight: bold;background-color: #FFFFFF" document.querySelector("div[id='wx_pay_ewm']").querySelector("canvas").parentNode.append(nihao); nihao.onclick = function () { location.reload(); }; }, 60000); }; //---------------------------------全局函数区------------------------------// function thxx(xx) { switch (xx) { case "A": xx = 0; break; case "B": xx = 1; break; case "C": xx = 2; break; case "D": xx = 3; break; case "E": xx = 4; break; }; return xx; }; function fthxx(xx) { switch (xx) { case 0: xx = "A"; break; case 1: xx = "B"; break; case 2: xx = "C"; break; case 3: xx = "D"; break; case 4: xx = "E"; break; }; return xx; }; function cleanKeyStorage() {//缓存清理 localStorage.removeItem("cishu"); localStorage.removeItem("Answer"); }; function advis() { let div1 = document.createElement("div"); let div2 = document.createElement("div"); div1.innerHTML = `
`; div2.innerHTML = `