用于单击链接的Greasemonkey Jquery脚本
我正在尝试做我的第一个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页面上单击所有“加载更多注释”页面,并每隔十秒循环执行一次。
Why assign gender to public bathrooms, if there is only one toilet per restroom and the door locks? from AskReddit
现在,只会弹出hello world alert,但不会点击链接。 因此间隔函数正在工作,但加载更多注释不是。 不知道从哪里开始。 “加载更多评论”字符串中的空格可能会破坏它吗?
任何帮助非常感谢。 谢谢!
请参阅: 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);
您正在尝试模拟单击事件,但这仅适用于使用jQuery附加的事件。 加载的事件使用html属性附加reddit的更多评论链接。 即:
onclick="return morechildren(this, 't3_i7hb5', 'c21ko21,c21kesz,c21klil,c21ko45,c21kro5,c21l90v,c21lo38', 3, '')"
要解决您的问题,您需要从此属性中提取值并单独调用它们。
如果您在页面上加载了jQuery,则可以使用jQuery 触发 click事件