调查表自动滑块随机化

时间:2019-01-18 09:30:54

标签: javascript slider greasemonkey autofill tampermonkey

当我在网页上(主要是在Qualtrics或Surveymonkey等网络调查表上)遇到滑块位置(类型范围)时,我试图找出一种自动随机化的方法。我想将此滑块随机化添加到下面演示的一个已经存在的自动填充中。但是首先,下面是一些我想自动(使用CSS / HTML)的滑块类型的例子:

enter image description here

enter image description here

当前,我正在使用以下脚本在页面加载时(单选按钮,文本字段等)随机自动填写调查表。我想向此脚本添加滑块随机化:

// ==/UserScript==

(function() {
        // Save a random number
        var modifier = Math.floor(Math.random() * 9000000);

        // Create a fake user data
        var user = {
            pass : modifier + "",
            mail : modifier + '@Example.com'
        };

        // Array to save data
        var save_data = [];

        // Check window for tags
        function check(win, tagName) {
            try {
                // Get tags
                tagName = win.document.getElementsByTagName(tagName)
            } catch (e) {
                // Not found - Empty array
                tagName = []
            }

            // For each tag
            for (i = 0; i < tagName.length; i++) {

                // This tag
                var tag = tagName[i];

                // Exclude read-only or desabled
                if (tag.readOnly || tag.disabled) continue;

                // Get tag values
                var name = tag.name;
                var type = tag.type;
                var value = tag.value;

                // If Check box
                if ('checkbox' == type){
                    tag.checked = Math.random() > .5;
                }
                // If password
                else if ('password' == type){
                    value = user.pass;
                    // Update tag value
                    tag.value = value;
                }
                // If text
                else if ('text' == type) {
                    // If mail
                    if(name.match(/mail/i)){
                        value = user.mail;
                    }
                    // Update tag value
                    tag.value = value;
                }
                // If radio
                else if ('radio' == type) {
                    // If data don't exist
                    if (!save_data[name]) {
                        save_data[name] = 1;
                    }else{
                        save_data[name] ++;
                    }
                    // Check it with probabilities (depending on the length)
                    tag.checked = Math.random() < (1 / save_data[name]);
                }
                // If select
                else if (type.match(/^select/)){
                    // Set a random options
                    tag.selectedIndex = Math.random() * (tag.options.length - 1) + 1;
                }
            }
            // Try to set focus to the input
            if (tag) try {
                tag.focus()
            } catch (e) {}
        }

        function recursive(win) {
            check(win, 'password');
            check(win, 'select');
            check(win, 'input');

            // For each frame on page
            for (var i = 0; i < win.frames.length; i++) {
                // Check all frames inside
                recursive(win.frames[i])
            }
        }
        recursive(window);
    }());

由于我知道滑块属于输入类型范围,所以我添加的代码需要以类似于以下内容的开头:

else if ('range' == type) {

                    if (!save_data[name]) {
                        save_data[name] = 1;
                    }else{
                        save_data[name] ++;
                    }

                    tag.checked = Math.random() < (1 / save_data[name]);
                }

如您所见,我将这段代码基于脚本的单选按钮部分。不幸的是,这似乎不起作用,并且我目前无法找到有关如何选择新的滑块位置或启动滑块运动的语法。我认为它的工作方式不同于可单击的复选框或单选按钮。我知道滑块的范围通常是在CSS / HTML中指定的,因此显然需要对此加以说明。任何帮助都将是绝对美妙的。预先感谢。

1 个答案:

答案 0 :(得分:1)

From w3school

  

更改滑块控件的值:

     
document.getElementById("myRange").value = "75";

对其进行了一些调整以使其随机(如果输入范围在0到100之间):

document.getElementById("myRange").value = Math.floor(Math.random() * 100);