Temper monkey(油猴)实现问卷星填写

这篇具有很好参考价值的文章主要介绍了Temper monkey(油猴)实现问卷星填写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

// ==UserScript==
// @name         问卷星3.0
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       YYdny
// @match        https://www.wjx.cn/vm/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=csdn.net
// @grant        none


// ==/UserScript==

(function () {
    'use strict';

    //默认存储22个题
    var arr = ["div1", "div2", "div3", "div4", "div5", "div6", "div7", "div8", "div9", "div10", "div11"
        , "div12", "div13", "div14", "div15", "div16", "div17", "div18", "div19", "div20", "div21", "div22"];

    //二维数组存储填空题答案
    var date = [["华为", "vivo", "OPPO", "苹果", "三星", "荣耀", "iQOO", "小米", "一加", "努比亚", "红米", "Moto", "诺基亚"],
    ["外观", "功能", "配置", "厂商"],
    ["手机卡", "系统不稳定", "信号差", "系统bug多", "拍照不好看", "像素太低", "容易摔坏"],
    ["用电快", "价格太贵", "越用越卡", "更新太快", "配置太低"],
    ["延长保修", "推出以旧换新", "增加线下店面"]];

    // 存储填空题中的题干的  唯一  关键字 !!!一定要和二维数组date里的答案相对应
    // 例如:
    // 品牌———————["华为", "vivo", "OPPO", "苹果", "三星", "荣耀", "iQOO", "小米", "一加", "努比亚", "红米", "Moto", "诺基亚"]
    // 因素——————["外观", "功能", "配置", "厂商"]
    var mathStr = ["品牌", "因素", "提快", "国际", "售后"];
    var mathFail = [];
    var answNumTem;
    var exQues;
    var quesNum;
    var ansNum;

    window.onload = function () {
        //获取题的个数
        quesNum = document.querySelector('fieldset').children.length;
        //当大于22道题时先向数组里添加新的题号然后再填写题目
        while (quesNum > 22) {
            for (var x = 22; x <= quesNum; x++) {
                exQues = "div" + x;
                arr.push(exQues);
            }
            break;
        }
        try {
            //填写问卷
            FillQues();
            //提交
            Submit();
            //当填空题填写 "无" 时输出题号
        } catch (err) {
            console.log(err)
        }
        finally {
            Submit();
        }
        while (mathFail.length != 0) {
            //输出没有值的填空题
            ReadFailText();
            break;
        }
    }
    //填写问卷的函数
    function FillQues() {
        for (var i = 0; i < arr.length; i++) {
            var multpText = document.getElementById(arr[i]).children[0].innerText.indexOf("多选题")
            //多选题
            if (multpText >= 0) {
                //去掉其他选项
                lostOther(i);
                //多选题 选择三项
                for (var j = 0; j < 3; j++) {
                    SelectOp(i);
                }
            }//非多选题
            else {
                var InpuText = document.getElementById(arr[i]).children[1].children[0].tagName;
                //填空题
                if (InpuText == 'INPUT') {
                    //当填空题文本框为空时设置textNull的值为真
                    var textNull = true;
                    //判断题干是否包含mathStr数组里的关键字,如果包含关键字找出是在数组第几位
                    for (var n = 0; n <= mathStr.length; n++) {
                        //避免填空题没找到匹配导致程序错误
                        var indexInput = document.getElementById(arr[i]).children[0].innerText.indexOf(mathStr[n]);
                        //如果包含关键字 在准备好的date数组中拿到数据填写
                        if (indexInput >= 0) {
                            //生成随机数为从date数组拿答案做准备
                            var x = Math.floor((Math.random() * date[n].length));
                            //填写答案
                            document.getElementById(arr[i]).children[1].children[0].value = date[n][x];
                            //填入内容后切换textNull状态为假
                            textNull = false;
                            break;
                        }
                        else {
                            document.getElementById(arr[i]).children[1].children[0].value = "无";
                        }

                    }
                    while (textNull) {
                        //打印出没有填写的填空题
                        var quesLen = document.getElementById(arr[i]).children[0].innerText;
                        mathFail.push(quesLen.slice(0, quesLen.length - 2) + "___未匹配到关键字");
                        break;
                    }
                }//单选
                else {
                    lostOther(i);
                    SelectOp(i);
                }
            }
        }
    }

    //提交方法
    function Submit() {

        var isClickVerfy = true;
        var interval = setInterval(function () {
            //是否出现对话框
            while (document.getElementsByClassName('layui-layer-content')[0] ? true : false) {
                // 关闭对话框
                document.getElementsByClassName("layui-layer-btn1")[0].click();
                break;
            }//是否第一次点击验证按钮
            while (document.getElementById("SM_TXT_1") ? true : false && isClickVerfy) {
                //点击验证按钮
                document.getElementById("SM_TXT_1").click();
                //关闭点击验证按钮
                isClickVerfy = false;
                break;
            }//第二重验证是否出现
            while (document.getElementsByClassName('nc-lang-cnt') ? true : false) {
                //两秒后取消计时器
                setTimeout(function () {
                    //清除计时器
                    clearInterval(interval);
                    VerifyCheck();
                }, 2000)
                break;
            }
        }, 500)
        //提交按钮
        document.getElementById('ctlNext').click();
    }
    //输出没有成功填入值的填空题号
    function ReadFailText() {
        var totalText = mathFail[0];
        //循环读出mathFail里的值
        for (var i = 1; i < mathFail.length; i++) {
            totalText += mathFail[i] + "\n";
        }
        //输入totalText数组里的值
        alert(totalText);
        console.log(totalText);
    }
    //去掉其他
    function lostOther(i) {
        //获取答案个数
        answNumTem = document.getElementById(arr[i]).children[1].children.length;
        //存储答案个数
        ansNum = answNumTem;
        //循环答案选项判断是否有  “其他”  选项
        for (var m = 0; m < answNumTem; m++) {
            while (document.getElementById(arr[i]).children[1].children[m].innerText.indexOf("其他") >= 0) {
                //去掉最后一项  “其他” 一般都是最后一项
                --ansNum;
                break;
            }
        }
    }

    //勾选答案
    function SelectOp(n) {
        //生成选择项
        var index = Math.floor((Math.random() * ansNum));
        //勾选选项
        document.getElementById(arr[n]).children[1].children[index].click();
    }

    // 滑块验证
    function VerifyCheck() {
        // 获得滑块
        var btn = document.querySelector(".nc_iconfont.btn_slide");
        //创建鼠标事件
        var mousedown = document.createEvent('MouseEvents');
        // 获取滑块的的大小和相对于视口的位置
        var rect = btn.getBoundingClientRect();
        // 存储滑块相对视口边缘的x值
        var x = rect.x;
        // 存储滑块相对视口边缘的Y值
        var y = rect.y;
        // 初始化mouse down
        mousedown.initMouseEvent('mousedown', true, true, window, 0,
            x, y, x, y, false, false, false, false, 0, null);
        // 触发mouse down事件
        btn.dispatchEvent(mousedown);

        var offsetX = 0;
        // 定时触发器
        var interval = setInterval(function () {
            // 创建鼠标事件
            var mousemove = document.createEvent('MouseEvents');
            // X轴 移动距离
            var currentX = x + offsetX;
            //初始化鼠标移动
            mousemove.initMouseEvent('mousemove', true, true, window, 0,
                currentX, y, currentX, y, false, false, false, false, 0, null);
            // 触发鼠标移动事件
            btn.dispatchEvent(mousemove);
            // 判断滑块位移距离
            if (currentX - x >= 260) {
                //清除计时器
                clearInterval(interval);
                //定义鼠标事件
                var mouseup = document.createEvent('MouseEvents');
                //初始化鼠标抬起
                mouseup.initMouseEvent('mouseup', true, true, window, 0,
                    currentX, y, currentX, y, false, false, false, false, 0, null);
                // 触发鼠标抬起
                btn.dispatchEvent(mouseup);
            }
            else {
                // 增加偏移量
                offsetX += Math.ceil(Math.random() * 50);

            }
        }, 60);
    }
})();

为毛概的社会实践调查问卷写的脚本,js不是我的主语言所以功能不完善,目前支持单选、多选、填空,可以实现智能验证以及通过第二重验证,有兴趣大佬可以再完善一下,二重验证参考:js 模拟鼠标拖动 - rubekid - 博客园 (cnblogs.com)

测试地址:关于大学生手机品牌选择的调查问卷[复制] (wjx.cn)

油猴安装地址:Tampermonkey • 首页

脚本使用方法:

1.安装油猴脚本

2.打开油猴新建脚本

3.将脚本内容全部删掉然后放入上方代码文章来源地址https://www.toymoban.com/news/detail-766752.html

到了这里,关于Temper monkey(油猴)实现问卷星填写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot整合Freemaker结合Vue实现页面填写一键自动生成Redis的配置文件

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 标题 一文带你学会使用SpringBoot+Avue实现短信通知功能(含重要文件代码) 一张思维导图带你学会Springboot创

    2024年02月10日
    浏览(44)
  • 傻瓜式提取网页数据的油猴脚本(JavaScript 代码)

    目录 目录 一、脚本适用范围 二、将脚本配置到浏览器 三、脚本用法 四、脚本原理 五、脚本代码 脚本适用范围: 一次性提取任意网站的布局类似的数据,例如 淘宝的商品价格、微博的热搜标题、必应搜索的图片链接 脚本不适用范围: 页面布局不相似的数据。如下图圈出

    2024年01月22日
    浏览(40)
  • Python运行代码警告MonkeyPatchWarning: Monkey-patching ssl......问题如何解决

    MonkeyPatchWarning: Monkey-patching ssl after ssl has already been imported may lead to errors, including RecursionError on Python 3.6. It may also silently lead to incorrect behaviour on Python 3.7. Please monkey-patch earlier. See https://github.com/gevent/gevent/issues/1016. Modules that had direct imports (NOT patched): ...... 这个警告信息是由 Ge

    2024年02月05日
    浏览(37)
  • 问卷调查|在线问卷调查系统|基于Springboot的在线问卷调查系统设计与实现(源码+数据库+文档)

    在线问卷调查系统目录 目录 基于Springboot的在线问卷调查系统设计与实现 一、前言 二、系统设计 三、系统功能设计  1、问卷管理 2、 问卷调查管理 3、题目管理 4、 用户管理 四、数据库设计  1、实体ER图 五、核心代码  六、论文参考 七、最新计算机毕设选题推荐 八、源码

    2024年03月12日
    浏览(51)
  • 油猴脚本Tampermonkey实现读取网站cookie和设置cookie方法

    里面有一个这样的说明:意思是这个还处于试验阶段,可能会报错误,确实,在我使用下来,我发现,它不单单是报错这么简单,而是真的就不能用好吗 会报各种错误,比如: not supported 或者是 Unchecked runtime.lastError: The message port closed before a response was received 这一顿操作下来

    2024年02月07日
    浏览(69)
  • 使用React、Express实现一个问卷发布/收集系统

    1. 设置项目结构 2. 启动前端应用 在 client 目录下,创建React应用并启动它: 3. 设置Express后端 在 server 目录下,设置Express后端: 在 server/app.js 中设置Express应用: 4. 创建Express路由 在 server/routes 目录下,创建路由文件,例如 auth.js 和 questionnaire.js ,以处理用户身份验证和问卷

    2024年02月07日
    浏览(29)
  • Word 插件实现读取excel自动填写

    日常工作中碰到需要将EXCEL的对应数据记录填写到word文档对应的位置,人工操作的方式是: 打开exel表—查找对应报告号的行—逐列复制excel表列单元格内容到WORD对应的位置(如下图标注所示) 这种方法耗时且容易出错。实际上如果使用VBA开发WORD插件,编写代替人手操作的自

    2024年02月16日
    浏览(35)
  • el-form实现其中一个填写即可的校验

       

    2024年02月13日
    浏览(45)
  • 基于web的问卷调查系统的设计与实现 毕业设计开题报告

     博主介绍 :《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月04日
    浏览(43)
  • Python3+Selenium+Chrome实现自动填写WPS表单

      本文通过python3、第三方python库Selenium和谷歌浏览器Chrome,完成WPS表单的自动填写。   python3的安装:略,网上都有教程。   Selenium的安装:在命令行输入 pip3 install selenium 并回车即可完成安装,如果不成功,查找网上教程。   Chrome的安装:略,网上都有教程。   

    2024年02月01日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包