我的Greasemonkey脚本如何自动重新加载页面,并自动单击按钮?

时间:2012-09-18 15:56:09

标签: javascript click greasemonkey reload

我是JavaScript的初学者。我需要知道这是否可行,然后如果是,那该怎么做。

我想创建一个Greasemonkey脚本,它会每小时自动重新加载一个网页,然后在重新加载页面后,我希望它为我点击一个按钮。

这可能吗?

1 个答案:

答案 0 :(得分:5)

  • 点击内容时,请参阅this answer

  • 另请参阅a javascript reference for location.reload()

  • 另请参阅a better javascript reference for setTimeout()

  • 由于按钮可以通过AJAX加载(需要更多信息),请参考the waitForKeyElements() utility,以便处理AJAX延迟/修改。

  • 开始学习jQuery;它会为你节省大量的悲伤和努力。

  • 确定所需按钮的jQuery选择器。您可以使用 Firebug 等工具来帮助解决这个问题(请注意,jQuery选择器和CSS选择器大致相同,但jQuery有更多选项/功能)。

    例如,如果页面的HTML有一个如下所示的部分:

    <div id="content">
        <p>Blah, blah, blather...</p>
    
        <h2>Your available actions:</h2>
        <button class="respBtn">Like</button>
        <button class="respBtn">Hate</button>
        <button id="bestOption" class="respBtn">Nuke them all</button>
    </div>
    

    然后3个按钮的选择器可能(分别):

    1. $("#content button.respBtn:contains('Like')");
    2. $("#content button.respBtn:contains('Hate')");
    3. $("#bestOption");(如果元素有一个,请始终使用id。)


总而言之,这是一个重新加载和点击的完整的Greasemonkey脚本

// ==UserScript==
// @name     _Reload and click demo
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a major design
    change introduced in GM 1.0.
    It restores the sandbox.
*/

waitForKeyElements ("#bestOption", clickTargetButton);

function clickTargetButton (jNode) {
    var clickEvent = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    jNode[0].dispatchEvent (clickEvent);
}

//--- Reload after 1 hour (1000 * 60 * 60 milliseconds)
setTimeout (location.reload, 1000 * 60 * 60);