Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当计时器达到0时,使用Greasemonkey自动单击按钮_Javascript_Greasemonkey - Fatal编程技术网

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

Javascript 当计时器达到0时,使用Greasemonkey自动单击按钮,javascript,greasemonkey,Javascript,Greasemonkey,下面是一个计时器的示例 我需要一个代码,当计时器达到0时,它会自动点击按钮1809 我尝试过这个,但不起作用: var waitForZeroInterval = setInterval (CheckForZero, 0); var hasRun = false; function CheckForZero () { if ( (unsafeWindow.seconds == 0) && (unsafeWindow.milisec == 0) ) {

下面是一个计时器的示例 我需要一个代码,当计时器达到0时,它会自动点击按钮1809

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

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);
    };
}
更多更新:

HTML

这很好用。。我已经测试过了。我会在1秒后收到警报。单击按钮,然后调用do_some函数以显示警报。
您可以在此处查看它是单击按钮一次然后停止,还是根本不单击按钮?
看起来
hasRun
逻辑是错误的

我不能在那个网站进行测试,因为(1)它让我非常恼火,(2)它似乎需要注册——我不会这么做。因此,请确认它是这样运行的:

  • 您登录并加载一个拍卖页面——本例中为1809
  • 30秒计时器启动。当它达到0时,您单击
  • 计时器重置--是否有延迟?--为新的30秒倒计时,但拍卖保持不变
  • 重复,令人作呕
  • 如果所有这些都是真的,并且当前代码单击了按钮一次,那么这应该可以工作:

    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']"
    );
    

    这样拍卖号码就不必硬编码。

    不,不要!只需使用
    document.getElementById(“bottone1809”)。单击()。另外,您不需要准备()greasemonkey脚本。我已经在测试后更新了代码。。请现在检查一下。它应该可以工作。@Bergi你是对的,不需要准备好,但是document.getElementById(“bottone1809”)。click()实际上不工作。你是什么意思,
    问题是“如果(…)”
    ??具体点。另外,请回答我提出的问题:按钮是否单击一次并停止,还是根本没有单击?
    函数CheckForZero(){if((unsafeWindow.seconds==0)和&(unsafeWindow.miliesec==0)){alert('ciao')}
    对prezzipazzi不起作用,我不知道为什么页面JS变量与问题所暗示的不同(例如,
    seconds
    不是int)。此外,如果您让脚本在选项卡中运行,然后在另一个窗口中执行某些操作,Firefox将限制非焦点窗口的JS。最后,您尝试的操作无疑违反服务条款,并且在您所在的位置可能是非法的。
    var targButton  = document.getElementById ('bottone1809');
    
    var targButton  = document.querySelector (
        "#left-inside div.post-wrapper td center input[id^='bottone']"
    );