让Greasemonkey在第一次加载时单击一个按钮,然后间隔?

时间:2016-06-30 15:49:11

标签: firefox click settimeout greasemonkey

我正在尝试制作Greasemonkey脚本,每隔一段时间点击一个按钮,并在第一次加载时点击它而不等待。

我制作了这个代码,每120秒点击一次,但第一次加载页面时我必须等待120秒才能让代码单击GO按钮或我必须手动执行。 :

window.setTimeout(function(){document.getElementById("masterPage_cphPageBody_btnGo").click()},120000)

以下是与网站相关的源代码

<input id="masterPage_cphPageBody_btnGo" name="masterPage$cphPageBody$btnGo" value="Go" onclick="SetSearchDate();showWaitpage();" class="btn2" type="submit">

如何在第一次加载页面时添加一行以点击GO,然后在120秒后添加一行?

按下GO按钮之前和之后的网页具有相同的确切URL,因此在没有等待时间的情况下添加点击GO按钮会将hte页面发送到循环 URL加载GO点击了
URL已加载GO已单击 URL已加载GO已单击 ...

检查了第一次点击GO按钮之前和之后页面的差异...

因此,只有在页面上未显示以下页面时,我才需要脚本立即单击“Go”按钮

<span id="masterPage_cphPageBody_lblSelectAvailableTime" class="bodyBold">Select an available time</span>

但如果页面上显示“选择可用时间”文本,则脚本应等待120 secon

我正在运行:Greasemonkey,Windows 8 64,Firefox

2 个答案:

答案 0 :(得分:1)

使用命名函数代替匿名函数(Often a good idea anyway)。

然后使用document.querySelector检查该元素是否存在。 (该函数比getElementById具有更大的灵活性。)

所以你的代码变成了:

if (null === document.querySelector ("#masterPage_cphPageBody_lblSelectAvailableTime") ) {
    clickGoButton ();  //-- Initial, immediate click.
}

window.setTimeout (clickGoButton, 120000);

function clickGoButton () {
    document.getElementById ("masterPage_cphPageBody_btnGo").click ();
}

答案 1 :(得分:0)

考虑到post和pre Go按钮URL是相同的,以避免引导循环我发现post和pre click之间的文本差异,并用它来避免循环

这是最后为我工作的代码

if (/Select an available time/i.test (document.body.innerHTML) )
{
    window.setTimeout (clickGoButton, 120000);
}
else {
  clickGoButton ();
}


function clickGoButton () {
    document.getElementById ("masterPage_cphPageBody_btnGo").click ();
}