Автоматический щелчок нескольких кнопок с добавлением waitForKeyElements - PullRequest
0 голосов
/ 19 января 2019

Я искал способ автоматического выбора кнопок формы опроса, которые содержат определенные слова на разных сайтах.Я использую Tampermonkey в Google Chrome для достижения этой цели.В этом случае я бы хотел автоматически выбирать кнопки со словами «Мужской» и «Мистер»в них.

Вот пример типа кнопки, о которой я говорю (включая CSS / HTML):

enter image description here

В настоящее время я использую следующий код в Tampermonkey для достижения эффекта нажатия:

// ==UserScript==
// @name         Male Test 3
// @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();

waitForKeyElements (
    "label",
    fire
);

Приведенный выше скрипт успешно выбирает «Male» при загрузке страницы вышеупомянутого сайта, но я не уверен, как нажимать несколько кнопокв то же время.Я также хочу автоматически выбрать "Мистер"а также, что является еще одной кнопкой на странице.Итак, в конечном итоге, я хочу, чтобы сценарий выбирал Мужской И Мистер при загрузке страницы.К счастью, они оба находятся внутри «метки», поэтому я думаю, что waitForKeyElements может быть в порядке.

К сожалению, JavaSript не является моей рулевой рубкой, и у меня возникают проблемы с поиском правильного синтаксиса, чтобы сделать это возможным.Это кажется таким простым решением.

Я пробовал что-то вроде find(e => e.textContent === 'Male', 'Mr.'), но безрезультатно.

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

1 Ответ

0 голосов
/ 19 января 2019

Вы можете создать функцию, которая, учитывая текст <span>, находит .find соответствующий элемент и щелкает его родительский элемент.После срабатывания waitForKeyElements вызовите эту функцию с помощью Male и Mr.:

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

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

Если вы хотите повысить эффективность, вы можете создать объект из этих совпадающих элементов при срабатывании обратного вызова (при условиини один, который вас волнует), и каждый раз обращайтесь к соответствующему свойству, например:

waitForKeyElements (
  "label",
  () => {
    const parentsByTextContent = Array.prototype.reduce.call(
      document.querySelectorAll('label > span'),
      (a, e) => {
        a[e.textContent] = e.parentElement;
        return a;
      },
      {}
    );
    parentsByTextContent['Male'].click();
    parentsByTextContent['Mr.'].click();
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...