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

Automatically clicking multiple buttons on a page containing the same text and tag

我目前使用的脚本会自动点击与指定文本关联的单选按钮(但位于指定标签内;在本例中,'label')。

当页面加载时,任何带有文本 "Male" 的单选按钮(假定它在 label 标记内)会自动 selected。这是我用来执行此操作的不完整脚本:

// ==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" 的单选按钮都会被 select 编辑。但是,如果有其他按钮将 "Male" 作为答案选择,它们将保持未 select 状态。我希望能够 select 所有这些 - 单击所有包含 "Male," 的按钮,而不仅仅是第一个。任何和所有建议将不胜感激。

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

您可以使用 .forEach 循环并单击所有带有文本 Male

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

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

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

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

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