以这个为例,运行后问卷星的单选题会是随机选择答案,请问需要更改哪里能让它实现单选题自己设定选择正确答案,或是第一单选题固定选择第一个答案,第二个单选题固定选择第二答案,现在打状况是所有单选题答案都是全随机。
javascript: void (
(function () {
var hash = {};
var a = document.evaluate('//input[(@type="radio") and not(@value="0")]//@name',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
if (a.snapshotLength){
for (var i = 0; i < a.snapshotLength; i++) {
if (!(a.snapshotItem(i).value in hash))
hash[a.snapshotItem(i).value] = 0;
hash[a.snapshotItem(i).value]++;
}
for (i in hash) {
document.evaluate('//input[(@type="radio") and not(@value="0") and @name="' + i + '"]',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null).snapshotItem(Math.floor(Math.random() * hash[i])).click();
}
}
var array = new Array();
var as = document.getElementsByTagName("a");
var preName = "";
var change = false;
for(var i=0; i < as.length; i++){
if(as[i].getAttribute("rel") != null && as[i].nextSibling.getAttribute("type") == "checkbox"){
var name = as[i].nextSibling.getAttribute("name");
var check = as[i].nextSibling.getAttribute("checked");
if(check == "checked"){
as[i].click();
}
if(preName == "" || preName == name){
if(Math.random() * 10 > 5){
as[i].click();
change = true;
}
}
var next = as[i + 1];
if(next.getAttribute("rel") != null && next.nextSibling.getAttribute("type") == "checked" && next.getAttribute("name") != name){
if(!change){
as[i].click();
}
change = false;
}
if(i == as.length - 1 && !change){
as[i].click();
}
preName = name;
}
}
var objs = document.getElementsByTagName("textarea");
for (var i = 0; i < objs.length; i++){
objs[i].focus();
objs[i].value = "最好的意见就是没有意见,哈哈哈哈哈哈哈";
objs[i].blur();
}
var choose = document.getElementsByTagName("select");
for (var i = 0; i < choose.length; i++) {
choose[i].focus();
choose[i].value = "1";
choose[i].blur();
}
})());
function validate(){return true;}
var btn = document.getElementById("submit_button");
window.setTimeout(btn.click(),2000);
————————————————
版权声明:本文为CSDN博主「宾宾叔叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46429858/article/details/105614804
【以下回答由 GPT 生成】
这段代码是使用JavaScript来自动在问卷星的单选题中选择答案。目前的问题是,代码会随机选择每个单选题的答案,而你想要实现的是对于每一个单选题,第一个题固定选择第一个答案,第二个题固定选择第二个答案,以此类推。下面是对这段代码的解释和改进建议。
首先,这段代码使用XPath来找到页面中所有的单选题,并将它们按照name属性进行分组。然后,它通过循环将每个选项的name值作为键,对应的选项数量作为值,存储在一个hash对象中。
接下来,它再次使用XPath来找到页面中的每个单选题,并通过调用click()方法来随机选择一个选项。这里的Math.floor(Math.random() * hash[i])是用来生成一个随机数,该数决定了选中的选项是第几个选项。这就是为什么当前情况下所有单选题的答案都是随机选择的。
然后,代码检查页面中的链接,找到第一个可点击的链接,并触发它的click()方法。
现在,针对你的需求,我们需要对代码进行一些修改。首先,我们不再需要hash对象,因为我们要固定每个单选题的选择。我们将通过直接定位每个单选题的选项来选择指定的答案。
具体的改进步骤如下:
var hash = {};
var a = document.evaluate('//input[(@type="radio") and not(@value="0")]//@name',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null);
if (a.snapshotLength){
for (var i = 0; i < a.snapshotLength; i++) {
if (!(a.snapshotItem(i).value in hash))
hash[a.snapshotItem(i).value] = 0;
hash[a.snapshotItem(i).value]++;
}
}
for (i in hash) {
document.evaluate('//input[(@type="radio") and not(@value="0") and @name="' + i + '"]',
document,
null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null).snapshotItem(0).click();
}
上述代码将每个单选题的第一个选项设为固定选择的答案。
var array = new Array();
var as = document.getElementsByTagName("a");
var preName = "";
var change = false;
for(var i=0; i < as.length; i++){
if(as[i].name != preName){
if(i != 0 && change == false){
break;
}else{
preName = as[i].name;
change = false;
}
}
if(as[i].name == preName && change == false){
var temp = as[i].href.split("#");
if(temp[1] != "" && document.getElementById(temp[1]) != null){
array.push(temp[1]);
}
change = true;
}
}
if(array.length>0){
var link = document.getElementById(array[Math.floor(Math.random()*array.length)]);
link.click();
alert("sign sign sign");
}else{
alert("not find");
}
通过上述改进,代码现在会将每个单选题的第一个选项作为固定选择的答案。你可以将修改后的代码复制到浏览器的开发者工具中,或者将其保存为书签,然后在问卷星页面中运行该代码来实现指定答案的单选题。
【相关推荐】