JavaScript——问卷星自动填写

一、前言:

  我们学校要刷学术章,有些学术章又是指定在某个时间点填写问卷星的问卷报名的。但是由于我手速慢,导致总会有些时候报不上名,于是想着搞个代码实现自动填写问卷星的报名表。一顿操作后,在github上找到了比较合适的源码,修改一些代码后,就可以实现问卷星自动填写!参考地址:https://github.com/wkmyws/wjxJS

  博主环境:win10 64 + 谷歌浏览器

   要实现在浏览器上运行javascript代码,有以下两种方式:

  ①在问卷星页面直接F12打开控制台,然后控制台粘贴提前写好的javascript代码,回车运行即可!但是这种方法,速度慢,不太可取(因为要每次先打开问卷星填写页面,然后再去打开控制台,然后再粘贴,然后......,时间都过了不少了,或许别人都填好提交了o(╥﹏╥)o)

  ②在谷歌浏览器插入油侯脚本,可以使浏览器自动运行js脚本程序。这种方法速度快,效果稳定,下面将使用该方法进行测试!

二、配置+测试

1. 谷歌浏览器插入油侯脚本

1.1 油侯脚本是一款免费的浏览器扩展和最为流行的用户脚本管理器,增强了用户对浏览体验的控制权。油侯脚本下载地址:http://www.tampermonkey.net/

1.2 安装过程:

  ①在chrome浏览器右上角点开 竖三点 —> 更多工具 —> 扩展程序

  ②在扩展程序页面,打开开发者模式

  ③点击 加载已解压的扩展程序 ,选择下载解压后的文件夹

  

    注意:下载解压后的油侯脚本最好不要放在谷歌浏览器默认扩展程序位置,否则重启后油侯脚本可能会被浏览器清除掉!建议油侯脚本文件放在自定义位置!

  ④安装完成后,谷歌浏览器右上角会显示油侯脚本图标

  

   

2. 测试

2.1 自动填写问卷星

1.测试代码如下:(支持问卷星的input、radio、checkbox,仅支持填写)

// ==UserScript==
// @name         问卷星测试——支持input radio checkbox
// @version      1.1
// @description  测试
// @author       蛋片鸡
// @match        https://www.wjx.top/*
// @match        https://www.wjx.cn/*
// @grant        none
// @require      https://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==


/*
**info 第一个参数:对应的填入选项(字符串)
**info 第二个参数:匹配的标题(正则表达式)
**info 第三个参数:(可选),当答题框为单选|多选时匹配的选项(正则表达式)
*/

(function() {
    'use strict';
    const info=[
        ["蛋片鸡",/(姓名)|(名字)/],
        ["18711111",/(学号)/],
        ["单选框_性别",/(性别)/,/(男)|(男生)/],
        ["单选框_年级",/(年级)/,/(18级)|(2018级)/],
        ["机自学院",/(学院)/],
        ["计算机",/(专业)/],
        ["11011001100",/(联系方式)|(电话)|(手机)|(手机号)/],
        ["1000000000@qq.com",/(QQ)|(qq)/]
    ];
    const ini={
        module:".div_question",//每个问题模块
        title:".div_title_question",//标题
        type:{
           "input_text":".inputtext",
           "radio":".ulradiocheck",
           "checkbox":".ulradiocheck"
        }
    };
    $(document).ready(function(){
        let itemNum = 0;
        $(ini.module).each(function(){
            itemNum += 1;
            let title=$(this).find(ini.title).text();
            //判断类别
            for(let i=0;i<info.length;i++){//匹配用户信息
                if(info[i][1].test(title)){//匹配到一处信息,判断答题框类型,加break!
                   for(let tp in ini.type){
                       let dom=$(this).find(ini.type[tp]);
                       if(dom.length>0){
                           switch(tp){
                               case "input_text":
                                   $("#q"+itemNum)[0].value = info[i][0]; //赋值
                                   break;
                               case "radio":
                               case "checkbox":
                                   $(this).find("li").each(function(){
                                       if(info[i].length>=3&&info[i][2].test($(this).text())){
                                           $(this).find("a").click();
                                       }
                                   });
                                   break;
                               default:console.log("ini.type中没有匹配"+tp+"的键值");
                           }
                           break;
                       }
                   }
                    break;
                }
            }
        });
    });
})();

2.测试结果:

测试使用的问卷星链接:https://www.wjx.top/jq/46606239.aspx

2.2 自动填写并提交问卷星

1.测试代码如下:(支持填写并提交功能)

// ==UserScript==
// @name         问卷星测试——支持input radio checkbox
// @version      1.1
// @description  测试
// @author       FHC
// @match        https://www.wjx.top/*
// @match        https://www.wjx.cn/*
// @grant        none
// @require      https://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==


/*
**info 第一个参数:对应的填入选项(字符串)
**info 第二个参数:匹配的标题(正则表达式)
**info 第三个参数:(可选),当答题框为单选|多选时匹配的选项(正则表达式)
*/

(function() {
    'use strict';
    const info=[
        ["蛋片鸡",/(姓名)|(名字)/],
        ["18711111",/(学号)/],
        ["单选框_性别",/(性别)/,/(男)|(男生)/],
        ["单选框_年级",/(年级)/,/(18级)|(2018级)/],
        ["机自学院",/(学院)/],
        ["计算机",/(专业)/],
        ["11011001100",/(联系方式)|(电话)|(手机)|(手机号)/],
        ["1000000000@qq.com",/(QQ)|(qq)/]
    ];
    const ini={
        module:".div_question",//每个问题模块
        title:".div_title_question",//标题
        type:{
           "input_text":".inputtext",
           "radio":".ulradiocheck",
           "checkbox":".ulradiocheck"
        }
    };
    $(document).ready(function(){
        let itemNum = 0;
        $(ini.module).each(function(){
            itemNum += 1;
            let title=$(this).find(ini.title).text();
            //判断类别
            for(let i=0;i<info.length;i++){//匹配用户信息
                if(info[i][1].test(title)){//匹配到一处信息,判断答题框类型,加break!
                   for(let tp in ini.type){
                       let dom=$(this).find(ini.type[tp]);
                       if(dom.length>0){
                           switch(tp){
                               case "input_text":
                                   $("#q"+itemNum)[0].value = info[i][0]; //赋值
                                   break;
                               case "radio":
                               case "checkbox":
                                   $(this).find("li").each(function(){
                                       if(info[i].length>=3&&info[i][2].test($(this).text())){
                                           $(this).find("a").click();
                                       }
                                   });
                                   break;
                               default:console.log("ini.type中没有匹配"+tp+"的键值");
                           }
                           break;
                       }
                   }
                    break;
                }
            }
        });
        $('.submitbutton').click();
    });
})();

 

 其实上面就是增加了一行代码就可以进行问卷提交!

2.测试结果:

测试使用的问卷星链接:https://www.wjx.top/jq/46606239.aspx

 

 

 

########2023.1.30日更新###################

由于问卷星页面元素更新,之前的代码可能就不能自动填写了,今晚搞了搞,重新分析了下页面元素,现更新一下测试代码:(支持问卷星的input、radio、checkbox,仅支持填写)

// ==UserScript==
// @name         问卷星测试——支持input radio checkbox
// @version      1.1
// @description  测试
// @author       蛋片鸡
// @match        https://www.wjx.top/*
// @match        https://www.wjx.cn/*
// @grant        none
// @require      https://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==


/*
**info 第一个参数:对应的填入选项(字符串)
**info 第二个参数:匹配的标题(正则表达式)
**info 第三个参数:(可选),当答题框为单选|多选时匹配的选项(正则表达式)
*/

(function() {
    'use strict';
    const info=[
        ["蛋片鸡",/(姓名)|(名字)/],
        ["18711111",/(学号)/],
        ["单选框_性别",/(性别)/,/(女)|(女生)/],
        ["单选框_年级",/(年级)/,/(18级)|(2018级)/],
        ["机自学院",/(学院)/],
        ["自动化三班",/(班级)/],
        ["计算机",/(专业)/],
        ["11011001100",/(联系方式)|(电话)|(手机)|(手机号)/],
        ["1000000000@qq.com",/(QQ)|(qq)/]
    ];
    const ini={
        module:".ui-field-contain",//每个问题模块
        title:".field-label",//标题
        type:{
           "input_text":".ui-input-text",
           "radio":".ui-controlgroup",
           "checkbox":".ui-controlgroup"
        }
    };
    $(document).ready(function(){
        let itemNum = 0;
        $(ini.module).each(function(){
            itemNum += 1;
            let title=$(this).find(ini.title).text();
            console.log("title: ", title);
            //判断类别
            for(let i=0;i<info.length;i++){//匹配用户信息
                if(info[i][1].test(title)){//匹配到一处信息,判断答题框类型,加break!
                   for(let tp in ini.type){
                       console.log("tp: ", tp);
                       let dom=$(this).find(ini.type[tp]);
                       if(dom.length>0){
                           switch(tp){
                               case "input_text":
                                   $("#q"+itemNum)[0].value = info[i][0]; //赋值
                                   break;
                               case "radio":
                               case "checkbox":
                                   $(this).find(".ui-radio").each(function(){
                                       if(info[i].length>=3&&info[i][2].test($(this).text())){
                                           $(this).find("a")[0].click();
                                       }
                                   });
                                   break;
                               default:console.log("ini.type中没有匹配"+tp+"的键值");
                           }
                           break;
                       }
                   }
                    break;
                }
            }
        });
    });
})(); 

测试页面:https://www.wjx.top/vm/ryKqCXK.aspx

效果:

 

posted @ 2019-10-22 22:36  蛋片鸡  阅读(13222)  评论(7编辑  收藏  举报