当计时器达到0时,使用Greasemonkey自动点击按钮

时间:2011-11-28 18:21:30

标签: javascript greasemonkey

以下是计时器http://www.prezzipazzi.com/prodotto.php?id=1809的示例 我需要一个代码,当计时器达到0时,它会自动点击button1809。

我尝试了这个,但它不起作用:

var waitForZeroInterval = setInterval (CheckForZero, 0);
var hasRun = false;

function CheckForZero () {

    if ( (unsafeWindow.seconds == 0)  &&  (unsafeWindow.milisec == 0) )
    {
        clearInterval (waitForZeroInterval);

        var targButton  = document.getElementById ('bottone1809');
        var clickEvent  = document.createEvent ('MouseEvents');

        clickEvent.initEvent ('click', true, true);
        targButton.dispatchEvent (clickEvent);
    };

    if (!hasRun) {
        hasRun = true;
        setInterval(CheckForZero, 35000);
    };
}

2 个答案:

答案 0 :(得分:1)

是否单击按钮一次然后停止,或者根本不单击按钮? 看起来hasRun逻辑是错误的。

我无法在该网站进行测试,因为(1)它让我很烦恼,(2)似乎需要注册 - 我不会这样做。所以,请确认它的运作方式如下:

  1. 您在此示例中登录并加载了拍卖页面 - 1809。
  2. 30秒计时器启动。当它达到0时,你点击。
  3. 计时器重置 - 是否有延迟? - 新的30秒倒计时,但拍卖仍然相同。
  4. 重复,令人作呕。
  5. 如果一切正确,当前代码点击按钮一次,那么这应该有效:

    var waitForZeroInterval = null;
    
    function RestartZeroCheck () {
        waitForZeroInterval = setInterval (CheckForZero, 100);
    }
    
    function CheckForZero () {
    
        if ( (unsafeWindow.seconds == 0)  &&  (unsafeWindow.milisec == 0) )
        {
            clearInterval (waitForZeroInterval);
    
            var targButton  = document.getElementById ('bottone1809');
            var clickEvent  = document.createEvent ('MouseEvents');
    
            clickEvent.initEvent ('click', true, true);
            targButton.dispatchEvent (clickEvent);
    
            //--- After a short pause, start checking for the next timer to zero.
            setTimeout (RestartZeroCheck, 333);
        };
    }
    
    RestartZeroCheck ();
    


    请注意,如果可行,则检查页面的结构表明:

    var targButton  = document.getElementById ('bottone1809');
    

    可以改为:

    var targButton  = document.querySelector (
        "#left-inside div.post-wrapper td center input[id^='bottone']"
    );
    

    因此拍卖编号不必硬编码。

答案 1 :(得分:0)

更多更新:

HTML

<input type="button" name="button1" id="button1" onclick="do_some();"/>

脚本

var waitForZeroInterval = setInterval (function(){}, 0);
var hasRun = false;

function CheckForZero () {    
   clearInterval (waitForZeroInterval);
   jQuery('#button1').click();
 }

if (!hasRun) {
    hasRun = true;
    waitForZeroInterval  = setInterval(CheckForZero(), 1000);
    }

function do_some(){
alert("thank you");
}

这工作正常..我已经测试过了。我在1秒后收到警报。单击该按钮,然后调用do_some函数以显示警报。 你可以在这里查看run code