自动完成培训平台答题
// ==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] 主要逻辑 **** */
})();