javascript - 添加 waitForKeyElements 自动单击多个按钮

标签 javascript greasemonkey autofill userscripts tampermonkey

我一直在寻找一种方法来自动选择不同网站上包含特定单词的调查表单按钮。我在 Google Chrome 中使用 Tampermonkey 来实现此目的。在这种情况下,我想自动选择带有“男性”和“先生”一词的按钮在他们之中。

这是我正在讨论的按钮类型的示例(包括 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
);

上述脚本在上述网站的页面加载时成功选择“男性”,但我不确定如何同时单击多个按钮。我还想自动选择“先生”这也是页面上的另一个按钮。所以最终,我希望脚本在页面加载时选择“男性”和“先生”。幸运的是,它们都在一个“标签”内,所以我认为 waitForKeyElements 可能没问题。

不幸的是,JavaSript 不是我的专长,我很难找到正确的语法来实现这一点。这似乎是一个很容易解决的问题。

我尝试了诸如 find(e => e.textContent === 'Male', 'Mr.') 但无济于事。

本质上,我需要做的就是包含“Mr.”的文本以及已经指定的“男性”。任何和所有的帮助都会很棒。

最佳答案

你可以创建一个函数,给定 <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();
  }
);

关于javascript - 添加 waitForKeyElements 自动单击多个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54263861/

相关文章:

javascript - 每当在 Vue.js 中更改任何变量时触发监视函数

javascript - 使用 ng-options 在选择下拉列表中显示对象数据

javascript - 单击时删除当前元素上的悬停激活

jquery - 如何在 Google Chrome 的 Greasemonkey 脚本中使用 jQuery?

jquery - Chrome 打印预览失败,带有 jQ​​uery 打印按钮

javascript - 未捕获的类型错误 : Cannot read property 'AutoFill' of undefined

javascript - 为什么使用 window.setInterval() 后 window.setTimeout() 会变成循环调用

javascript - .click()/.trigger ('click' ) 不适用于 Spotify 中的 Tampermonkey

google-chrome - cpanel 不保存密码

iOS 自动填充假定密码前的字段是用户名