【问题标题】:Have Greasemonkey click a button at first load and then in intervals?Greasemonkey 是否在第一次加载时单击按钮,然后间隔单击?
【发布时间】:2016-07-01 07:19:31
【问题描述】:

我正在尝试制作 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 秒

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

【问题讨论】:

    标签: firefox click settimeout greasemonkey


    【解决方案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 ();
    }
    

    【讨论】:

    • 按下 GO 按钮之前和之后的网页具有相同的确切 URL,因此无需等待时间添加单击 GO 按钮将使页面进入 URL 加载循环 GO 点击 URL 加载 GO 点击 URL 加载GO点击...
    • 好的,查看修改后问题的更新答案。
    • 我想我几乎想出了相同的解决方案,看看下面的答案
    • 请注意,这种方法会带来很大的性能损失。在这种情况下应该没关系,但这是一个坏习惯。
    • 为什么?您的意思是选择实际文本与跨度 ID?.. 编码很有趣.. 真的很喜欢做这件小事.. 感谢您的帮助!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 2014-02-08
      相关资源
      最近更新 更多