1、申 请 I D:alertLock
2、个人邮箱:wkmyws@qq.com
3.作品 基于TamperMonkey的自动填写问卷星的脚本 github地址:https://github.com/wkmyws/wjxJS 在校学生,经常有些好的志愿(3-4人)是通过问卷星抢的,于是写了这么一个脚本 问卷星电脑端和手机端是不同的页面,先分析电脑端的 一个网页例子:https://www.wjx.cn/wjx/design/previewq.aspx?activity=43444346&s=1 打开chrome的devtools,发现 每个问题的模块都是 <div class="div_question">开头, 每个模块的标题都是<class="div_title_question"> 每个模块的答题框类型有文本、单选、多选,对应的class分别是inputtextulradiocheck ulradiocheck 把它们写到配置里: const ini={ module:".div_question",//每个问题模块 title:".div_title_question",//标题 type:{ "input_text":".inputtext", "radio":".ulradiocheck", "checkbox":".ulradiocheck" } };
定义个人信息const info=[ [/(姓名)|(名字)/,"狗蛋"], [/性别/,"男",/男/], [/班级/,"软工一班"], [/学号/,"08"], [/(联系)|(电话)|(手机)/,"12315"], [/(QQ)|(qq),"12345"/], [/空闲时间/,"周一",/(周一)|(星期一)|(29日)/] ];
然后遍历填写每个模块$(ini.module).each(function(){ let title=$(this).find(ini.title).text(); let No=$(this).find(".div_topic_question").text()-0; })
这里获取标题title和题号No
通过info[][0].test(title)来匹配题号和个人信息for(let i=0;i<info.length;i++){//匹配用户信息 if(info[0].test(title)){//匹配到一处信息,判断答题框类型 for(let tp in ini.type){ let dom=$(this).find(ini.type[tp]) if(dom.length>0){ switch(tp){ case "input_text": $("#q"+No).val(info[1]); break; case "radio": case "checkbox": $(this).find("li").each(function(){ if(info.length>=3&&info[2].test($(this).text()))$(this).find("a").click() }) break; default:alert("ini.type中没有匹配"+tp+"的键值"); } break; } } break; } }
switch根据答题框的类型,来进行相应的处理,
input型id为’q’+No,直接填入info[][1],
checkbox和radio都有标签<li>,<li>里有<a>和<label>
<label>提供选项文本,通过info[][2]来匹配选项
点击<a>进行选择选项
至此,电脑端的脚本就基本完成了,
手机端的脚本思路也是一样的,但是配置文件要改改const ini={ module:".field.ui-field-contain",//每个问题模块 title:".field-label",//标题 type:{ "input_text":"input[type='text']", "input_tel":"input[type='tel']", "radio":".ui-radio", "checkbox":".ui-checkbox" } };
细微处还是有差异的,源码见https://github.com/wkmyws/wjxJS |