Автоматическое нажатие нескольких кнопок на странице, содержащей один и тот же текст и тег - PullRequest
0 голосов
/ 01 февраля 2019

В настоящее время я использую сценарий, который автоматически щелкает переключатели, связанные с указанным текстом (но лежат в указанном теге; в данном случае, 'label').

Когда страница загружается, любая кнопка-переключательс текстом «Мужской» (учитывая, что он находится внутри метки) автоматически выбирается.Вот неполный сценарий, который я использовал для этого:

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

Прямо сейчас, когда я посещаю страницу опроса, выбирается первая радио-кнопка, которая содержит текст «Мужчина».Но если есть другие кнопки с «Мужской» в качестве выбора ответа, они остаются невыбранными.Я хочу иметь возможность выбрать все из них - нажать на все кнопки, которые будут содержать «Мужской», а не только первую.Любой совет будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

В приведенном ниже коде вы можете заменить .click() на .checked = "true".Или, может быть, есть метод, который устанавливает флажок true, а затем вызвать этот метод вместо .click()

const findAndClickParent = text => [...document.querySelectorAll('label > span')]
.find(e => e.textContent === text)
.parentElement
.click();
0 голосов
/ 01 февраля 2019

Причина, по которой в вышеуказанном коде выбирается только первая радиокнопка, заключается в том, что .find возвращает первый элемент, соответствующий тексту.

, вы можете использовать .forEach, чтобы выполнить цикл и щелкнуть все радиокнопки, имеющиетекст Мужской

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

ИЛИ

Вы можете использовать свойство checked для всех переключателей, которые вы хотите выбрать при загрузке страницы.

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