我正在尝试制作我的第一个greasemonkey脚本。我对jquery和javascript很新,所以对我来说很容易。
这是我到目前为止所拥有的。
// ==UserScript==
// @name load all page comments
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
// @namespace none
// @include http://www.reddit.com/*
// ==/UserScript==
setInterval( function () {
window.alert("Hello World!");
$("a:contains('load more comments')").click();
}, 10000);
这里的目标是点击样本reddit页面上的所有“加载更多评论”页面,然后每隔十秒循环执行一次。
http://www.reddit.com/r/AskReddit/comments/i7hb5/why_assign_gender_to_public_bathrooms_if_there_is/
现在,只会弹出hello world警告,但不会点击链接。因此间隔函数正在工作,但是加载更多注释不是。不知道从哪里开始。 “加载更多评论”字符串中的空格是否会破坏它?
任何帮助非常感谢。谢谢!
答案 0 :(得分:3)
请参阅:wiki.greasespot.net/Generate_Click_Events。
Reddit链接触发JavaScript而不是使用jQuery设置的JS。
这意味着在这种情况下,您需要发送一个实际的鼠标事件,如下所示:
setInterval ( function () {
var clickEvent = document.createEvent ("HTMLEvents");
clickEvent.initEvent ("click", true, true);
$("a:contains('load more comments')")[0].dispatchEvent (clickEvent);
}, 10000);
糟糕!我没有看到提到的问题点击“所有的'加载更多评论'”。 (那个页面有数百个!)
为此,请使用jQuery的each()
函数...
setInterval ( function () {
var moreLinks = $("a:contains('load more comments')");
moreLinks.each ( function () {
var clickEvent = document.createEvent ("HTMLEvents");
clickEvent.initEvent ("click", true, true);
this.dispatchEvent (clickEvent);
} );
}, 10000);
答案 1 :(得分:0)
您正在尝试模拟点击事件,但这仅适用于使用jQuery附加的事件。使用html属性附加的reddit 加载更多评论链接上的事件。即:
onclick="return morechildren(this, 't3_i7hb5', 'c21ko21,c21kesz,c21klil,c21ko45,c21kro5,c21l90v,c21lo38', 3, '')"
要解决您的问题,您需要从此属性中提取值并单独调用它们。
答案 2 :(得分:0)
如果您在页面上加载了jQuery,则只需使用jQuery trigger点击事件