通过添加 waitForKeyElements 自动单击多个按钮
Clicking multiple buttons automatically with the addition of waitForKeyElements
我一直在寻找一种方法来自动 select 包含跨不同网站的特定词的调查表按钮。我在 Google Chrome 中使用 Tampermonkey 来实现这一点。在这种情况下,我想自动 select 带有单词 'Male' 和 'Mr.' 的按钮。
这里是我所说的按钮类型的例子(包括CSS/HTML):
我目前在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
);
上述脚本在上述站点的页面加载后成功 selects "Male",但我不确定如何同时单击多个按钮。我也想自动 select "Mr." ,这是页面上的另一个按钮。所以最终,我希望脚本在页面加载时 select Male AND Mr.。幸运的是,它们都在 "label," 内,所以我认为 waitForKeyElements 可能没问题。
不幸的是,JavaSript 不是我的驾驶室,我很难找到正确的语法来实现这一点。看起来很容易修复。
我尝试了 find(e => e.textContent === 'Male', 'Mr.')
之类的方法,但无济于事。
基本上,我需要做的就是包括 'Mr.' 的文本以及已经指定的 'Male.' 任何和所有帮助都会很棒。
您可以创建一个函数,给定 <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.');
}
);
如果您想提高效率,可以在回调触发时创建那些匹配元素的对象(假设 none 您关心重叠),然后访问适当的 属性 每个时间,例如:
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();
}
);
我一直在寻找一种方法来自动 select 包含跨不同网站的特定词的调查表按钮。我在 Google Chrome 中使用 Tampermonkey 来实现这一点。在这种情况下,我想自动 select 带有单词 'Male' 和 'Mr.' 的按钮。
这里是我所说的按钮类型的例子(包括CSS/HTML):
我目前在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
);
上述脚本在上述站点的页面加载后成功 selects "Male",但我不确定如何同时单击多个按钮。我也想自动 select "Mr." ,这是页面上的另一个按钮。所以最终,我希望脚本在页面加载时 select Male AND Mr.。幸运的是,它们都在 "label," 内,所以我认为 waitForKeyElements 可能没问题。
不幸的是,JavaSript 不是我的驾驶室,我很难找到正确的语法来实现这一点。看起来很容易修复。
我尝试了 find(e => e.textContent === 'Male', 'Mr.')
之类的方法,但无济于事。
基本上,我需要做的就是包括 'Mr.' 的文本以及已经指定的 'Male.' 任何和所有帮助都会很棒。
您可以创建一个函数,给定 <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.');
}
);
如果您想提高效率,可以在回调触发时创建那些匹配元素的对象(假设 none 您关心重叠),然后访问适当的 属性 每个时间,例如:
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();
}
);