[英]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.