自动单击页面上包含相同文本和标签的多个按钮

时间:2019-02-01 03:53:37

标签: javascript click greasemonkey autofill tampermonkey

我当前正在使用一个脚本,该脚本会自动单击与指定文本关联的单选按钮(但位于指定的标签内;在这种情况下为“标签”)。

在加载页面时,将自动选择带有文本“ Male”(假定在标签标签中)的任何单选按钮。这是我用来执行此操作的不完整脚本:

// ==UserScript==
// @name         Auto Clicker
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        *
// @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 findAndClickParent = text => [...document.querySelectorAll('label > span')]
  .find(e => e.textContent === text)
  .parentElement
  .click();

waitForKeyElements (
  "label",
  () => {
    findAndClickParent('Male');
  }
);

现在,每当我访问调查页面时,都会选择第一个包含文本“ Male”的单选按钮。但是,如果还有其他按钮以“ Male”作为答案选择,则这些按钮将保持未选中状态。我希望能够选择所有这些-单击包含“ Male”的所有按钮,而不仅仅是第一个。任何和所有建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

在上面的代码中仅第一个单选按钮被选中的原因是.find返回与文本匹配的第一个元素。

您可以使用.forEach循环并单击所有带有“ Male”字样的单选按钮

[...document.querySelectorAll('label > span')].forEach(e => e.textContent === "Male" ? e.parentElement.click(): null)

OR

您可以对要在页面加载时选择的所有单选按钮使用checked属性。

<input type="radio" name="gender" value="male" checked="true">

答案 1 :(得分:1)

在下面的代码中,您可以将.click()替换为.checked = "true"。或者,也许有一个方法将其设置为true,然后调用该方法而不是.click()

const findAndClickParent = text => [...document.querySelectorAll('label > span')]
.find(e => e.textContent === text)
.parentElement
.click();