发表于 2019-8-5 10:08

申请会员ID:alertLock



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[].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)                     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[],
checkbox和radio都有标签<li>,<li>里有<a>和<label>
<label>提供选项文本,通过info[]来匹配选项
点击<a>进行选择选项
至此,电脑端的脚本就基本完成了,
手机端的脚本思路也是一样的,但是配置文件要改改const ini={      module:".field.ui-field-contain",//每个问题模块      title:".field-label",//标题      type:{         "input_text":"input",         "input_tel":"input",         "radio":".ui-radio",         "checkbox":".ui-checkbox"      }    };
细微处还是有差异的,源码见https://github.com/wkmyws/wjxJS

Hmily 发表于 2019-8-6 11:48

抱歉,未能达到申请要求,申请不通过,可以关注论坛官方微信(吾爱破解论坛),等待开放注册通知。
页: [1]
查看完整版本: 申请会员ID:alertLock