繁体   English   中英

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

[英]How to automatically click the AJAX button with a Greasemonkey script?

(请参阅下面的解决方案)我有一个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脚本中自动单击javascript按钮(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);

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

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

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

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

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

您最好提供指向运行脚本的页面之一的链接,以便我可以确保脚本可以按预期运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM