(请参阅下面的解决方案)我有一个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秒出现,因此需要超时。
答案 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);
您最好提供指向运行脚本的其中一个页面的链接,这样我就可以确保脚本按预期运行。