// ==UserScript==
// @name 问卷星答题
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author YYdny
// @match https://www.wjx.cn/vm/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=youkuaiyun.com
// @grant none
// ==/UserScript==
(function () {
'use strict';
//默认存储22个题
var arr = ["div1", "div2", "div3", "div4", "div5", "div6", "div7", "div8", "div9", "div10", "div11"
, "div12", "div13", "div14", "div15", "div16", "div17", "div18", "div19", "div20", "div21", "div22"];
//二维数组存储填空题答案
var date = [["xxx"],
["xxxxxxxxx"],
["xxx学院"],
["大xxx"],
["xxxxxxxxx"]];
// 存储填空题中的题干的 唯一 关键字 !!!一定要和二维数组date里的答案相对应
// 例如:
// 手机号———————[19922223333]
// 因素——————["姓名","手机号码","学院"]
var mathStr = ["姓名", "手机号码", "学院", "学号"];
var mathFail = [];
var answNumTem;
var exQues;
var quesNum;
var ansNum;
window.onload = function () {
//获取题的个数
quesNum = document.querySelector('fieldset').children.length;
//当大于22道题时先向数组里添加新的题号然后再填写题目
while (quesNum > 22) {
for (var x = 22; x <= quesNum; x++) {
exQues = "div" + x;
arr.push(exQues);
}
break;
}
try {
//填写问卷
FillQues();
//提交
Submit();
//当填空题填写 "无" 时输出题号
} catch (err) {
console.log(err)
}
finally {
Submit();
}
while (mathFail.length != 0) {
//输出没有值的填空题
ReadFailText();
break;
}
}
//填写问卷的函数
function FillQues() {
for (var i = 0; i < arr.length; i++) {
var multpText = document.getElementById(arr[i]).children[0].innerText.indexOf("多选题")
//多选题
if (multpText >= 0) {
//去掉其他选项
lostOther(i);
//多选题 选择三项
for (var j = 0; j < 3; j++) {
SelectOp(i);
}
}//非多选题
else {
var InpuText = document.getElementById(arr[i]).children[1].children[0].tagName;
//填空题
if (InpuText == 'INPUT') {
//当填空题文本框为空时设置textNull的值为真
var textNull = true;
//判断题干是否包含mathStr数组里的关键字,如果包含关键字找出是在数组第几位
for (var n = 0; n <= mathStr.length; n++) {
//避免填空题没找到匹配导致程序错误
var indexInput = document.getElementById(arr[i]).children[0].innerText.indexOf(mathStr[n]);
//如果包含关键字 在准备好的date数组中拿到数据填写
if (indexInput >= 0) {
//生成随机数为从date数组拿答案做准备
var x = Math.floor((Math.random() * date[n].length));
//填写答案
document.getElementById(arr[i]).children[1].children[0].value = date[n][x];
//填入内容后切换textNull状态为假
textNull = false;
break;
}
else {
document.getElementById(arr[i]).children[1].children[0].value = "无";
}
}
while (textNull) {
//打印出没有填写的填空题
var quesLen = document.getElementById(arr[i]).children[0].innerText;
mathFail.push(quesLen.slice(0, quesLen.length - 2) + "___未匹配到关键字");
break;
}
}//单选
else {
lostOther(i);
SelectOp(i);
}
}
}
}
//提交方法
function Submit() {
var isClickVerfy = true;
var interval = setInterval(function () {
//是否出现对话框
while (document.getElementsByClassName('layui-layer-content')[0] ? true : false) {
// 关闭对话框
document.getElementsByClassName("layui-layer-btn0")[0].click();
break;
}//是否第一次点击验证按钮
while (document.getElementById("SM_TXT_1") ? true : false && isClickVerfy) {
//点击验证按钮
document.getElementById("SM_TXT_1").click();
//关闭点击验证按钮
isClickVerfy = true;
break;
}//第二重验证是否出现
while (document.getElementsByClassName('nc-lang-cnt') ? true : false) {
//两秒后取消计时器
setTimeout(function () {
//清除计时器
clearInterval(interval);
VerifyCheck();
}, 2000)
break;
}
}, 500)
//提交按钮
document.getElementById('ctlNext').click();
}
//输出没有成功填入值的填空题号
function ReadFailText() {
var totalText = mathFail[0];
//循环读出mathFail里的值
for (var i = 1; i < mathFail.length; i++) {
totalText += mathFail[i] + "\n";
}
//输入totalText数组里的值
alert(totalText);
console.log(totalText);
}
//去掉其他
function lostOther(i) {
//获取答案个数
answNumTem = document.getElementById(arr[i]).children[1].children.length;
//存储答案个数
ansNum = answNumTem;
//循环答案选项判断是否有 “其他” 选项
for (var m = 0; m < answNumTem; m++) {
while (document.getElementById(arr[i]).children[1].children[m].innerText.indexOf("其他") >= 0) {
//去掉最后一项 “其他” 一般都是最后一项
--ansNum;
break;
}
}
}
//勾选答案
function SelectOp(n) {
//生成选择项
var index = Math.floor((Math.random() * ansNum));
//勾选选项
document.getElementById(arr[n]).children[1].children[index].click();
}
// 滑块验证
function VerifyCheck() {
// 获得滑块
var btn = document.querySelector(".nc_iconfont.btn_slide");
//创建鼠标事件
var mousedown = document.createEvent('MouseEvents');
// 获取滑块的的大小和相对于视口的位置
var rect = btn.getBoundingClientRect();
// 存储滑块相对视口边缘的x值
var x = rect.x;
// 存储滑块相对视口边缘的Y值
var y = rect.y;
// 初始化mouse down
mousedown.initMouseEvent('mousedown', true, true, window, 0,
x, y, x, y, false, false, false, false, 0, null);
// 触发mouse down事件
btn.dispatchEvent(mousedown);
var offsetX = 0;
// 定时触发器
var interval = setInterval(function () {
// 创建鼠标事件
var mousemove = document.createEvent('MouseEvents');
// X轴 移动距离
var currentX = x + offsetX;
//初始化鼠标移动
mousemove.initMouseEvent('mousemove', true, true, window, 0,
currentX, y, currentX, y, false, false, false, false, 0, null);
// 触发鼠标移动事件
btn.dispatchEvent(mousemove);
// 判断滑块位移距离
if (currentX - x >= 260) {
//清除计时器
clearInterval(interval);
//定义鼠标事件
var mouseup = document.createEvent('MouseEvents');
//初始化鼠标抬起
mouseup.initMouseEvent('mouseup', true, true, window, 0,
currentX, y, currentX, y, false, false, false, false, 0, null);
// 触发鼠标抬起
btn.dispatchEvent(mouseup);
}
else {
// 增加偏移量
offsetX += Math.ceil(Math.random() * 50);
}
}, 60);
}
})();
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 2024-11-18
// @description try to take over the world!
// @author You
// @match https://www.wjx.cn/vm/O9regIR.aspx
// @icon https://www.google.com/s2/favicons?sz=64&domain=wjx.cn
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
})();
点击扩展
点这个打开之后搜索“篡改猴”,安装完这个插件,再打开第一步里的扩展点击篡改猴,点击管理面板
点击小加号,把上面的代码复制进去,并按文件-->保存。退出。