本帖最后由 ZYMKJ 于 2023-2-17 11:46 编辑
本帖最后由 ZYMKJ 于 2023-2-16 14:04 编辑
最近再写一个在线学习的脚本。每一个课程学完,需要做随堂练习,并且需要达到一定分数才能进入下一个课程。手动答题比较比较耽误做其他工作,所以学习了2天,写了一段简单的答题代码,所有答题均随机。
备注:所有答案选项的ID 都是统一格式:#questions_0_0 (第一题第一个选项),#questions_1_1 (第2题第二个选项)。
判断题:2选1,比较简单,50%的成功率。代码如下:0
var pd = function(){return Math.random() < 0.5 ? 0 : 1} //随机生成0和1
document.querySelector('#questions_0_'+pd()).click() //搜索带入变量pd
单选题:4选1,也还算简单,25%的成功率。代码如下:
var dx = function(){return Math.floor(Math.random()*4)} //随机生成一个大于等于0,小于3的数
document.querySelector('#questions_1_'+dx()).click()
多选题:比较复杂,在学习2天后,用了1天尝试了多种方法后完成,代码如下:
var xxgs =document.querySelectorAll('[id^="questions_2_"]').length //xxgs选项个数
var a= new Array();
var b = document.querySelectorAll('[id^="questions_1_"]') //把所有答案选项,放入列表
//下面代码为,列表b全部元素转为数组a的对象,为随机排序做准备
for (let i = 0; i < xxgs; i++) {
var ele = b[i];
a.push(ele);
}
//下列代码:给数组a随机排序,并导入数组c。(洗牌算法,排序概率比较平均)
var c
function shuffle(array){
let res = [], random;
while(array.length>0){
random = Math.floor(Math.random()*array.length);
res.push(array[random]);
array.splice(random, 1);
}
return res;
}
c=shuffle(a);
//随机生成多选,选几个答案
var xjg = function(){return Math.round(Math.random()*(xxgs-2)+2)}
//for循环,选择随机排序数组c的前xjg答案
for(let j=0;j<xjg;j++){
c[j].click();
}
提交答案:这个就简单了。
setTimeout(document.querySelector('#submitBt').click(),200)
PS. 把过程进行了封装,直接调用就OK。更新代码如下:
/*
说明:
1、DXT:单选;
2、PDD:判断题
3、duoXuan:多项选择题
4、DJT:第几道题
5、XXGS:选项个数
6、MAX:最多选几个答案
7、MIN:最少选几个答案
举例:
duoXuan(3,5,5,2)
多项选择题,第3道题,一共5个选项,最多选5个,最少选2个
*/
function DXT(DJT,XXGS){
let XH = DJT-1
let dx = function(){return Math.floor(Math.random()*XXGS)}
document.querySelector('#questions_'+XH+'_'+dx()).click()
}
function PDD(DJT,XXGS){
let XH = DJT-1
let pd = function(){return Math.random() < 0.5 ? 0 : 1}
document.querySelector('#questions_'+XH+'_'+pd()).click()
}
function duoXuan(DJT,XXGS,MAX,MIN){
let a = new Array();
let XH = DJT-1;
for (let m =0;m<XXGS;m++){
let ele = document.querySelector('#questions_'+XH+'_'+m);
a.push(ele);
}
function shuffle(array){
let res = [], random;
while(array.length>0){
random = Math.floor(Math.random()*array.length);
res.push(array[random]);
array.splice(random, 1);
}
return res;
}
let c = shuffle(a)
let xjg = function(){return Math.floor(Math.random()*(MAX-MIN+1)+MIN)}
for(let j=0;j<xjg;j++){
c[j].click();
}
}