通过输入type ='range'

时间:2019-02-06 05:28:16

标签: javascript slider greasemonkey userscripts tampermonkey

我试图找出一种方法,当我访问具有滑动条位置的网页时(输入条形为“范围”)(通常在Qualtrics或Surveymonkey等网络调查表上),该方法可以自动将其随机化。我正在尝试通过Google Chrome中的Tampermonkey实现此目的。我希望能够加载页面并让任何滑块自动设置为滑块上的随机点。然后,我想将此滑块随机添加到下面显示的已经存在的自动填充脚本中。

但是首先,这是我想自动使用(使用CSS / HTML)的滑块类型的几个示例:

enter image description here

如您所见,它使用输入type ='range',如页面上的HTML / CSS所示。

enter image description here

在这里,输入类型是隐藏的,但是我的理论是仅仅因为它是一个滑块,所以它是一个范围。我希望能够加载页面并将这些滑块自动设置为滑块上的随机点。

下面是我用来在页面加载时自动填充重复表单某些方面的当前脚本。我想为此添加滑块随机化,并且我已经尝试(但失败了)根据以下一些代码建立滑块随机化器:

// ==/UserScript==

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

        // 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 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, '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]);
                }

不幸的是,这不起作用并且无法操纵滑块。我愚蠢地认为仅将类型更改为“范围”可能会起作用。我认为使用输入type ='range'是关键,因为大多数滑块似乎总是在不同网页上共享它。

在这一点上,我正在尝试找出前进的方法,但是我不确定除了类型之外还有什么要改变的。任何和所有建议都是很好的。预先感谢。

0 个答案:

没有答案