您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动完成培训平台答题
// ==UserScript== // @name AutoCompleteYxlearning // @namespace AutoCompleteYxlearning.Gingmzmzx.GitHub.io // @homepage https://github.com/Gingmzmzx/AutoCompleteYxlearning/ // @version 0.1.1 // @description 自动完成培训平台答题 // @author Gingmzmzx // @license Apache License 2.0 // @match http*://*.yxlearning.com/learning/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACeElEQVQ4jW2SXUhTYRjHf+/ZaTrLbThbTlaEJWKRhEnMMLtIvHKI6EUUxmrdKURFk+iDpItkgtDHVXZiFxFEBMWoICiyAk0kwm7CEkzMrSEqfgzdTuftwjOZH+/NAw//5/c+f/6PYJPn8YdzgSpgr9n6BQzFoqGl9VqxbtCKlBcR4gLgXqeNg7wjET3xaCi1AeDxh53AS6AWwCKkUeOd0w8XLygFNp35lIXhRB4ffjs+z6ctTfFoaHYVUOQPqwJeAfUAhba0fuXIH0qcyyrwEXgDLEhJ+fSS2vLgm3twcDK/MRYNGYpJOZkZtloM40bNBCXOZYBWCcd8Aa0LuF99Rmtz2fQDbZV/3XW7Z1sAFNPB+YyVhj0z+k57SgV6fAHtsQBlIBK8B4wORIKnfQEtYc/519FcNt0GoBb5w4VARQZwdNdcBqqZtRZoBwxgv9lLbN+a9vV2t9tVAV5AzQC8+SkDyRKCCbM1BJQCSSDeHwkCBC0Ca7lj0asCq5EApA2BqkorYDeHiiSyFVgWCJdA1oKoQqKrVjGlAmMgkyDyAH5O25QKd1IBGoCHEuICcQ4oXpO84K4v8CihxKKhJIj3mQ1ejzoNKUFC50AkWFwd0Bak5DjwBPgKvACagcvZKdwGdIAvk9usfeP2lFj5sa8/crZOCEZ8Ae2UL6AdklI23/zknWh6Xpa7uo/HHwa4BVyDlSs8sW9KbyydUbdYpAKMAyOGhHdjjpJnP1y9w0+vdmUZAo8/rJiA65lUHDm6fnDHIi7zlL8n8vT4orVTIrvi0Q7WALJAlcAlCfUCWWBKpoC3QHcsGhrO1m8AZIFUCU4BSJiNR0P6Zrr/+n7jhpzfJhYAAAAASUVORK5CYII= // @grant none // ==/UserScript== (function() { 'use strict'; function randstr(len = 1, text = null) { var t = text || ("0123456789abcdef" + "ghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), a = t.length, n = ""; for (let i = 0; i < len; i++) { n += t.charAt(Math.floor(Math.random() * a)); } return n; } // function randstr /* **** [BEGIN] 根元素创建 **** */ var root = document.createElement('div'); document.body.append(root); /* **** [END] 根元素创建 **** */ /* **** [BEGIN] 数据声明 **** */ var panel_class = '__' + randstr(8); var myops_classn = '__opts' + randstr(4); /* **** [END] 数据声明 **** */ /* **** [BEGIN] CSS **** */ var style1 = document.createElement('style'); style1.innerHTML = ` /* Global styles */ * { user-select: text !important; -webkit-user-select: text !important; -moz-user-select: text !important; -comment-comment: "Enable selecting"; } *[disabled] { cursor: not-allowed !important; } /* Class styles */ .${panel_class} { display: block; text-align: center; position: fixed; box-shadow: 0 0 5px 0; background: rgba(255, 255, 255, 0.9); padding: 5px 5px; font-size: 13px; } .${panel_class} { z-index: 1048571; left: 10px; bottom: 10px; border: 1px solid #cccccc; } .${panel_class} a { display: block; color: blue; cursor: pointer; text-decoration: none; margin-top: 3px; } .${panel_class} a:hover { color: #f90; background: #dddddd; text-decoration: underline; } .${myops_classn} { margin: 1px 1px; padding: 3px 3px; } `; // style1.innerHTML root.append(style1); /* **** [END] CSS **** */ /* **** [BEGIN] 面板UI **** */ var panel = document.createElement('div'); panel.classList.add(panel_class); panel.innerHTML = `<div>自动学习</div> <div class="${myops_classn}"></div>`; root.append(panel); let p_fieldset = panel.querySelector(`.${myops_classn}`); let op_list = { "开始自动学习": function () { startAutoComplete(); }, "停止自动学习": function () { stopAutoComplete(); }, "清空答案列表": function () { clearAnswerList(); }, "退出": function () { panel.style.display = 'none'; stopAutoComplete(false); }, }; // let op_list if (p_fieldset) { for (let i in op_list) { let a = document.createElement('a'); a.href = 'javascript:void(0)'; a.innerHTML = i; a.__op = i; a.onclick = function (ev) { (ev || event).preventDefault(); try { op_list[this.__op](this); } catch (err) { console.error( 'Error executing operation ' + i + ':', err); }; } p_fieldset.append(a); } } // if (p_fieldset) /* **** [END] 面板UI **** */ /* **** [BEGIN] 主要逻辑 **** */ var answerList = [], intervalID = undefined; function startAutoComplete() { if (intervalID != undefined) { alert("已经开始了自动答题!"); return; } intervalID = setInterval(function() { if ( $(".pv-ask-modal").length ) { if($(".pv-ask-modal").is(":visible")) { // 有问答 var questionSelection = $(".pv-ask-form"); questionSelection.each(function() { var i = $(this); var val = String(i.children("label").text()).replace(/[A-Z]、/g, ""); console.log(val); if ( answerList.indexOf(val) !== -1 ) { console.log(`ignore ${val}`); } else { answerList.push(val); i.children("input").attr("checked", true); return false; } }); $(".pv-ask-submit").click(); checkIntervalID = setInterval(function() { // if ( $(".pv-ask-error-tip").length ) { // clearInterval(checkIntervalID); // } if ( $(".pv-ask-right-tip").length ) { answerList = []; clearInterval(checkIntervalID); } }, 20); } } }, 1000); console.log(`已开始自动学习,intervalID为${intervalID}`); } function stopAutoComplete(echoFlag=true) { if (intervalID != undefined){ clearInterval(intervalID); console.log(`已停止自动学习,intervalID为${intervalID}`); intervalID = undefined; } else { if (echoFlag) alert("还未开始自动答题!"); } } function clearAnswerList() { console.log(`清除前answerList: ${answerList}`); answerList = []; } /* **** [END] 主要逻辑 **** */ })();