Greasemonkey 是否在第一次加载时单击按钮,然后每隔一段时间单击一次按钮?

Have Greasemonkey click a button at first load and then in intervals?

我正在尝试制作 Greasemonkey 脚本,它可以每隔一段时间点击一个按钮,并且在第一次加载时无需等待就可以点击它。

我编写了每 120 秒点击一次的代码,但第一次加载页面时,我必须等待 120 秒才能让代码点击“开始”按钮,否则我必须手动执行。 :

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">

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

按下 GO 按钮之前和之后的网页完全相同 URL 因此添加无需等待时间的 GO 按钮点击将使 hte 页面进入循环 URL 已加载 GO 点击
URL 已加载 GO 点击 URL 已加载 GO 点击 ...

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

所以我需要脚本来立即单击 Go 按钮,只有当页面上没有显示以下页面时

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

但如果 "Select an available time" 文本显示在页面上,脚本应等待 120 秒

我是 运行:Greasemonkey,Windows 8 64,Firefox

在匿名函数上使用命名函数 (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 ();
}

考虑到 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 ();
}