自动单击包含特定文本的按钮的方法?
Way to automatically click button that contains certain text?
我一直在焦躁不安地寻找一种方法来自动 select 包含特定单词的调查表按钮。我在 Google Chrome 中使用 Tampermonkey。在这种情况下,我想自动 select 带有单词 'Male' 的按钮。
这里是我所说的按钮类型的例子(包括CSS/HTML):
所以对于问题:"What is your gender?",我想自动 select 'Male.' 我已经 运行 解决了我能找到的所有 Whosebug 问题可能有帮助,但没有结果。我选择了 label-based 方法并使用 "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();
}
}
不幸的是,代码不起作用,'Male' 的按钮在页面加载时未 selected。这可以在以下网站的第 2 页进行测试: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();
});
同样,没有。
我的一些类似问题分散在 Whosebug 中,但 none 的解决方案似乎在这里有效,或者我正在使用的代码可能已过时。我将不胜感激任何帮助。提前致谢。
尝试一下是否有效
$( ".SingleAnswer span" ).each(function( index ) {
if($( this ).text().includes("Male")) {
$( this ).click()
}
});
我已经在开发控制台中尝试了以下操作并且它有效。
希望对你有帮助
Array.from(document.querySelectorAll('label > span')).find(e => e.textContent === 'Male').parentElement.click()
该标签有一个您可以使用的 ID。使用这些 id 时,您无需在 textContent 中搜索 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
);
没有按钮元素。监听用户点击事件的元素其实是一个隐藏的输入:
<li class="Selection reg">
<!-- this input -->
<input choiceid="1" aria-labelledby="QID2-1-label" class="radio QR-QID2-1 QWatchTimer" type="radio" name="QR~QID2" id="QR~QID2~1" value="1" data-runtime-checked="runtime.Selected">
<!-- not these elements -->
<label for="QR~QID2~1" class="q-radio q-checked" aria-hidden="true" data-runtime-class-q-checked="runtime.Choices.1.Selected"></label> <span class="LabelWrapper">
<label for="QR~QID2~1" id="QID2-1-label" class="SingleAnswer q-checked" data-runtime-class-q-checked="runtime.Choices.1.Selected"><span>Male</span></label></span> <div class="clear"></div>
</li>
所以需要调用input
元素的click
方法来触发。例如你可以这样做:
var labels = document.getElementsByTagName('label');
for (var i = 0; i < labels.length; ++i) {
if (labels[i].textContent == "Male") {
labels[i].parentElement.parentElement.firstElementChild.click()
}
}
我一直在焦躁不安地寻找一种方法来自动 select 包含特定单词的调查表按钮。我在 Google Chrome 中使用 Tampermonkey。在这种情况下,我想自动 select 带有单词 'Male' 的按钮。
这里是我所说的按钮类型的例子(包括CSS/HTML):
所以对于问题:"What is your gender?",我想自动 select 'Male.' 我已经 运行 解决了我能找到的所有 Whosebug 问题可能有帮助,但没有结果。我选择了 label-based 方法并使用 "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();
}
}
不幸的是,代码不起作用,'Male' 的按钮在页面加载时未 selected。这可以在以下网站的第 2 页进行测试: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();
});
同样,没有。
我的一些类似问题分散在 Whosebug 中,但 none 的解决方案似乎在这里有效,或者我正在使用的代码可能已过时。我将不胜感激任何帮助。提前致谢。
尝试一下是否有效
$( ".SingleAnswer span" ).each(function( index ) {
if($( this ).text().includes("Male")) {
$( this ).click()
}
});
我已经在开发控制台中尝试了以下操作并且它有效。 希望对你有帮助
Array.from(document.querySelectorAll('label > span')).find(e => e.textContent === 'Male').parentElement.click()
该标签有一个您可以使用的 ID。使用这些 id 时,您无需在 textContent 中搜索 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
);
没有按钮元素。监听用户点击事件的元素其实是一个隐藏的输入:
<li class="Selection reg">
<!-- this input -->
<input choiceid="1" aria-labelledby="QID2-1-label" class="radio QR-QID2-1 QWatchTimer" type="radio" name="QR~QID2" id="QR~QID2~1" value="1" data-runtime-checked="runtime.Selected">
<!-- not these elements -->
<label for="QR~QID2~1" class="q-radio q-checked" aria-hidden="true" data-runtime-class-q-checked="runtime.Choices.1.Selected"></label> <span class="LabelWrapper">
<label for="QR~QID2~1" id="QID2-1-label" class="SingleAnswer q-checked" data-runtime-class-q-checked="runtime.Choices.1.Selected"><span>Male</span></label></span> <div class="clear"></div>
</li>
所以需要调用input
元素的click
方法来触发。例如你可以这样做:
var labels = document.getElementsByTagName('label');
for (var i = 0; i < labels.length; ++i) {
if (labels[i].textContent == "Male") {
labels[i].parentElement.parentElement.firstElementChild.click()
}
}