javascript - 自动点击包含特定文本的按钮的方法?

标签 javascript greasemonkey autofill userscripts tampermonkey

我一直在焦躁地寻找一种方法来自动选择包含特定单词的调查表单按钮。我在 Google Chrome 中使用 Tampermonkey。在本例中,我想自动选择其中包含“男性”一词的按钮。

这是我正在讨论的按钮类型的示例(包括 CSS/HTML):

enter image description here

因此,对于“您的性别是什么?”这个问题,我想自动选择“男性”。我已经浏览了所有我能找到的可能有帮助的 stackoverflow 问题,但没有结果。我选择了基于标签的方法并使用“textContent”希望能够识别表单问题中的文本。

这是我当前正在使用的代码(来自 How can I auto-select a radio button with Greasemonkey? ):

// ==UserScript==
// @name         Button Text Form Filler
// @include      https://tasupport.co1.qualtrics.com/jfe/form/SV_0qez6NHJGoCAmMt
// @version      1.0
// @description  Demonstration script to change form values
// ==/UserScript==

var labels = document.getElementsByTagName('label'); 
for (var i = 0; i < labels.length; ++i) { 
    if (labels[i].textContent == "Male") { 
        labels[i].click(); 
    }
}

不幸的是,代码不起作用,并且在页面加载时未选择“男性”按钮。可以在以下网站的第二页进行测试:https://tasupport.co1.qualtrics.com/jfe/form/SV_0qez6NHJGoCAmMt (上面的截图来自哪里)。

我还使用 jQuery ( How do I automatically click this button with tampermonkey? ) 尝试了以下操作:

// ==UserScript==
// @name         jQuery Button Test
// @version      0.1
// @require      https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
// @include      https://tasupport.co1.qualtrics.com/jfe/form/SV_0qez6NHJGoCAmMt
// ==/UserScript==

$(document).ready(function() {
  $("button:contains('Male')").click();
});

再说一次,什么都没有。

在 stackoverflow 上有一些与我类似的问题,但似乎没有一个解决方案在这里起作用,或者我正在使用的代码可能已经过时了。我将不胜感激任何和所有的帮助。提前致谢。

最佳答案

我已经在开发控制台中尝试了以下操作并且它有效。 希望对您有帮助

Array.from(document.querySelectorAll('label > span')).find(e => e.textContent === 'Male').parentElement.click()

该标签有一个可以使用的 ID。使用这些 ID 时,无需在文本内容中搜索 Male。

document.getElementById('QID2-1-label').click()
<小时/>

编辑

对于 tampermonkey,您需要一些设置来处理 xhr 请求。 您需要 jQuery、waitForKeyElements.js 并且 @match 需要您的 xhr url。

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You

// @match        https://tasupport.co1.qualtrics.com/jfe/form/SV_0qez6NHJGoCAmMt
// @match        https://tasupport.co1.qualtrics.com/jfe2/form/SV_0qez6NHJGoCAmMt/next?rand=775440350&tid=1&t=1547858208474
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require     https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant       GM_addStyle
// ==/UserScript==

const fire = () => Array.from(document.querySelectorAll('label > span')).find(e => e.textContent === 'Male').parentElement.click();

// another option
// const fire = () => document.getElementById('QID2-1-label').click();

waitForKeyElements (
    "#QID2-1-label",
    fire
);

关于javascript - 自动点击包含特定文本的按钮的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54252720/

相关文章:

javascript - JQuery - 回调下拉列表加载

javascript - 如何在dataTable中设置inputText的焦点

javascript - Firefox 选择文本范围

javascript - 两个日期选择器上的 Jquery 最小日期

javascript - 如何使用 JavaScript 检测网页中的登录表单?

Javascript 仅适用于alert() 和 Debug模式

javascript - 使用Greasemonkey加载我自己的视频播放器,跨域

javascript - 使用 greasemonkey 加载和解析远程 url

javascript - 鼠标悬停时替换部分 URL 以获取原始尺寸图像

asp.net - Chrome 将用户名自动填充到随机文本输入中