我写了一个小的greasemonkey脚本来打开此类型http://example.com/details.php?id=*&very=1
的链接,然后点击这些链接上的hello
按钮,但不知何故它无法正常工作
// ==UserScript==
// @name My Fancy New Userscript
// @namespace http://use.i.E.your.homepage/
// @version 0.1
// @description enter something useful
// @include http://example.com/details.php?id=*&very=1
// @copyright 2012+, You
// ==/UserScript==
function sayhello(){
for(var i=1;i<100;i++){
window.location.href='http://example.com/details.php?id='+i+'&very=1'
$("#hello").click()}
}
};
sayhello();
但它并不像我的预期那样有效。由于新的href符合include
规则,因此它将始终加载并加载...
我把它重写为:
function sayhello(){
var i=window.location.href.match(/\d+/)
j=Number(i)+1
window.location.href=window.location.href.replace(/\d+/, j);
$("#hello").click()
};
sayhello();
它运行缓慢,因为每次它都会加载整个新页面,有时如果页面中的某些内容没有正确加载,它将只停留在该页面上等待和加载然后崩溃。
如何跳过无法正确加载页面并保证脚本运行?
如何加快速度,我只需要点击一个特定按钮,不需要加载图片或其他内容。
任何人都可以提供帮助吗?
感谢。
答案 0 :(得分:2)
与在网页上运行的其他JavaScript一样,Greasemonkey脚本不会跨页面加载保留状态。结果,
for(var i = 1; i < 100; i++) {
window.location.href = 'http://example.com/details.php?id=' + i + '&very=1';
$("#hello").click();
}
将尝试加载http://example.com/details.php?id=1&very=1
。在这样做时,它会自行卸载并丢弃其状态。它没有到达$("#hello").click();
。
不要以程序的方式看待它,而是这样思考:你在网页上。您想要单击该按钮,然后转到下一个网页。考虑到这一点,您可以这样写:
$("#hello").click();
var currentID = /* retrieve current ID from URL */;
var nextID = currentID + 1;
if(nextID < 100) {
window.location.href = 'http://example.com/details.php?id='
+ nextID + '&very=1';
}
根据$("#hello").click()
的作用,您可能会或可能不会给它足够的时间来完成它应该做的事情。你可以通过在继续下一页之前添加setTimeout
来解决这个问题,或者试图找到某种回调来挂钩。
最后,如果你想加速,不加载图片或任何东西,那么解决方案是不使用浏览器。使其运行最快的方法是找出确切点击#hello
的内容,然后在浏览器外部编写脚本以模仿该操作。运气好的话,你不需要加载图片。