如何使用Greasemonkey脚本自动单击AJAX按钮?

时间:2014-04-02 18:34:53

标签: javascript jquery ajax greasemonkey userscripts

(请参阅下面的解决方案)我有一个Greasemonkey脚本,它点击目标网站中感兴趣的链接。我的脚本看起来如此:

var MyVar     = $("a:contains('Save')"); 
if (MyVar && MyVar.length)
window.location.href    = MyVar[0].href;   

问题是:链接没有任何有效目标,如下所示:

<div class="controls">
    <a href="#" id="submit" class="special button">Save</a> 
</div>

我想,这是一个AJAX按钮,如果不是这样,请证明我错了。我的脚本:

window.location.href    = MyVar[0].click();

无休止地点击它,并且非常快,以至于页面甚至无法刷新 它没有任何意义,但它是我实际点击该按钮的唯一方法。

到目前为止尝试过:

document.querySelector('special.button').click() //not working

setTimeout (clickDownloadButton, 1111);

function clickDownloadButton () {
    var dwnldBttn   = document.querySelector ("special.button");
    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    dwnldBttn.dispatchEvent (clickEvent); //does not work either.
}

和此(由Broc Adams提出,如Greasemonkey script Auto click javascript button (ajax?)所示):

// ==UserScript==
// @name     clicking
// @include  MY_SITE
// @include  MY-SITE
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==


waitForKeyElements ("a.special:contains('Save')", clickSaveButton);

setTimeout(function clickSaveButton (jNode) {
triggerMouseEvent (jNode[0], "mouseover");
triggerMouseEvent (jNode[0], "mousedown");
triggerMouseEvent (jNode[0], "click");
triggerMouseEvent (jNode[0], "mouseup");
}, 4000);

setTimeout(function triggerMouseEvent (node, eventType) {
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent (eventType, true, true);
node.dispatchEvent (clickEvent);
}, 4000);

以及

waitForKeyElements ("#submit", clickSaveButton);

setTimeout(function clickSaveButton (jNode) {
triggerMouseEvent (jNode[0], "mouseover");
triggerMouseEvent (jNode[0], "mousedown");
triggerMouseEvent (jNode[0], "click");
triggerMouseEvent (jNode[0], "mouseup");
}, 4000);

setTimeout(function triggerMouseEvent (node, eventType) {
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent (eventType, true, true);
node.dispatchEvent (clickEvent);
}, 4000);

但它对我不起作用。不幸的是,我无法提供URL,因为必须在该网站上注册,并且帐户将被激活需要两周时间,所以这不是一个真正的选择。问题是,我不是程序员,我刚刚学到了一些基础知识,以便自动化我的任务。我知道一些javascript,bash和ruby,但我显然必须采取一些“食谱”并修改它们。但现在事情变得越来越困难,我无法解决我的问题。

真正有用的(解决方案):

setTimeout(function() {
var link = document.querySelector('#submit');
if(link) {
    link.click();
}
}, 3000);

AJAX按钮在页面加载后1-2秒出现,因此需要超时。

1 个答案:

答案 0 :(得分:2)

我想知道下面的代码是否是你想要的。

var link = document.querySelector('#submit');
if(link) {
    link.click();
}

如果上述代码不起作用,请尝试添加超时,例如

setTimeout(function() {
    var link = document.querySelector('#submit');
    if(link) {
        link.click();
    }
//1-second delay
}, 1000);

您最好提供指向运行脚本的其中一个页面的链接,这样我就可以确保脚本按预期运行。