// ==UserScript== // @name 2024年暑假教师研修|国家智慧教育公共服务平台|国家中小学智慧教育平台|python秒刷(机构合作联系微信:Qcwk01) // @namespace http://tampermonkey.net/ // @version 2024.08.27 // @description 国家智慧教育公共服务平台(国家中小学智慧教育平台)python秒刷 // @author wendell // @match https://www.smartedu.cn/* // @match https://basic.smartedu.cn/* // @icon https://www.google.com/s2/favicons?sz=64&domain=smartedu.cn // @require https://cdn.jsdelivr.net/npm/sweetalert2@11.10.4/dist/sweetalert2.all.min.js // @antifeature payment // @resource css https://cdn.jsdelivr.net/npm/sweetalert2@11.10.4/dist/sweetalert2.min.css // @grant GM_addStyle // @grant GM_getResourceText // @license MIT // ==/UserScript== (function () { 'use strict'; // Your code here... // 引入第三方库https://github.com/sweetalert2/sweetalert2/ GM_addStyle(GM_getResourceText("css")); // 弹窗函数 function msg(txt, ms = 3000) { Swal.fire({ title: txt, position: "center", icon: "success", showConfirmButton: false, timer: ms, timerProgressBar: true, }) } var log = console.log; // 课程 var course_name = "2024年暑假教师研修(中小学版)"; var home = "https://basic.smartedu.cn/training/2024sqpx"; var course_url = [ "https://basic.smartedu.cn/teacherTraining/courseDetail?courseId=c83105a9-e6ea-48bc-bb6a-622416577fee&tag=2024%E5%B9%B4%E2%80%9C%E6%9A%91%E6%9C%9F%E6%95%99%E5%B8%88%E7%A0%94%E4%BF%AE%E2%80%9D%E4%B8%93%E9%A2%98&channelId=&libraryId=bb042e69-9a11-49a1-af22-0c3fab2e92b9&breadcrumb=2024%E5%B9%B4%E2%80%9C%E6%9A%91%E6%9C%9F%E6%95%99%E5%B8%88%E7%A0%94%E4%BF%AE%E2%80%9D%E4%B8%93%E9%A2%98", ] // 上述配置的课程,分别学习多少课时(看多少个视频),因为认定学时有限,每个课程不用刷完!!! // 配置-1为学完当前课程的所有视频 //var lessons = [-1, -1, -1]; var lessons = [8, 4, 4,1, 4, 5,2, 4,5]; function next() { var href = window.location.href; var index = course_url.indexOf(href); if (index > -1) { if (index + 1 < course_url.length) { window.location.href = course_url[index + 1]; } else { window.location.href = home; } } else { window.location.href = course_url[0]; } } //记录一个专题下的视频点击了多少个。 var clickNum=0; function click(auto_next = true) { // 判读是否满足学时要求 if (lessons) { var href = window.location.href; var index = course_url.indexOf(href); var lesson = lessons[index]; if (lesson != undefined && lesson != -1) { let headers = document.getElementsByClassName("fish-collapse-header"); for (let i = 0; i < headers.length; i++) { let header = headers[i]; header.click(); } let finish = document.getElementsByClassName("iconfont icon_checkbox_fill"); log(`当前页面已经学完【${finish.length}】个视频,学时要求为【${lesson}】个视频,是否达标:${finish.length >= lesson}`); if (finish.length >= lesson) { next(); } } } var icon = null; function find_icon() { // 进行中 icon = document.getElementsByClassName("iconfont icon_processing_fill")[0]; // 未开始 if (!icon) { icon = document.getElementsByClassName("iconfont icon_checkbox_linear")[0]; } } // 查找默认列表 find_icon(); // 展开其他列表 if (!icon) { let headers = document.getElementsByClassName("fish-collapse-header"); for (let i = 0; i < headers.length; i++) { let header = headers[i]; header.click(); find_icon(); if (icon) { break; } } } // 有没学完的 if (icon) { icon.click(); setTimeout(function () { play(); }, 1000); } else { if (auto_next) { next(); } else { Swal.fire("当前页面所有视频已经播放完!", "", "success"); } } // 有没学完的 /* if (icon && clickNum<=4) { clickNum++; icon.click(); setTimeout(function () { play(); }, 1000); } else { if (auto_next) { next(); } else { Swal.fire("当前页面所有视频已经播放完!", "", "success"); } } */ } function play(v = null) { //document.querySelector("video").dispatchEvent(new Event("ended")); // var v1 =document.querySelector("video");if(v1){v1.muted=true;v1.playbackRate=1.2; v1.play();} if (!v) { v = document.getElementsByTagName("video")[0]; } if (v) { v.dispatchEvent(new Event("ended")); setTimeout(function () { v.play(); }, 1000); setTimeout(function () { v.currentTime = v.duration-1 }, 1500); //v.muted = true; //v.playbackRate = 1; //v.play(); //v.currentTime = v.duration; } } var pageNumber = null; var pageCount = null; function read() { log(`PDF文档阅读: pageNumber==>${pageNumber}, pageCount==>${pageCount}`); if (pageCount) { var pc = pageCount; // 最后一页 log("PDF文档跳到最后一页:", pc); window.postMessage({ type: "pdfPlayerPageChangeing", data: { pageNumber: pc, pageCount: pc, } }, "*"); // 第一页 setTimeout(function () { log("PDF文档调到第一页..."); window.postMessage({ type: "pdfPlayerPageChangeing", data: { pageNumber: 1, pageCount: pc, } }, "*"); }, 1000); // 重置 pageCount = null; } } // 答题 function answer() { let count = 0; const intervalId = setInterval(() => { log("自动答题检测..."); // 选A var a = document.getElementsByClassName("nqti-check")[0]; if (a) { a.click(); // 下一题、确定 for (let i = 0; i < 2; i++) { var btn = document.querySelector("div.index-module_footer_3r1Yy > button"); if (btn) { btn.click(); } } } count++; if (count === 3) { clearInterval(intervalId); } }, 1000); } function main() { log("main..."); // 实际刷视频时比学时要求的多1~2个,避免网络等各种原因造成出错 if (lessons) { lessons.forEach(function (item, index, array) { if (item > 0) { item += 1; } array[index] = item; }); } // 等待页面加载,延时开始 var delay = 1000 * 5 var href = window.location.href; if (course_url.includes(href)) { msg(`等待网页资源加载, 约【${delay / 1000}】秒后开始自动播放视频`, delay); setInterval(function () { click(); //play(); //read(); //answer(); }, delay); } else { Swal.fire({ //background: "#url(https://baotangguo.cn:8081/)", icon: "warning", title: "开始刷视频?", text: "好好学习,天天向上!", showDenyButton: true, showCancelButton: true, confirmButtonColor: "green", confirmButtonText: `
刷脚本配置的课程,当前为:
${course_name}
`, denyButtonColor: "blue", denyButtonText: '
只刷当前页的视频
', cancelButtonColor: "red", cancelButtonText: '
退出
', }).then((result) => { /* Read more about isConfirmed, isDenied below */ if (result.isConfirmed) { msg("走你~"); next(); } else if (result.isDenied) { msg(`【${delay / 1000}】秒后开始自动播放视频`, delay); setInterval(function () { click(false); play(); read(); answer(); }, delay); } }) } } if (document.readyState === "complete") { // DOM 已经加载完成 main(); } else { // DOM 还未加载完成 window.onload = main; } document.addEventListener("keydown", function (event) { log("keydown", event.code); if (event.code === "KeyG") { main(); } }); window.addEventListener("message", function (event) { var data = event.data; log("message from PDF================>", data); if (data.type === "pdfPlayerInitPage") { pageNumber = data.data.pageNumber; pageCount = data.data.pageCount; log(`PDF文档初始化: pageNumber==>${pageNumber}, pageCount==>${pageCount}`); } }); })();