编写脚本以打开新链接并单击按钮

时间:2014-04-14 00:58:29

标签: javascript php jquery

我写了一个小的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();

它运行缓慢,因为每次它都会加载整个新页面,有时如果页面中的某些内容没有正确加载,它将只停留在该页面上等待和加载然后崩溃。
如何跳过无法正确加载页面并保证脚本运行?

如何加快速度,我只需要点击一个特定按钮,不需要加载图片或其他内容。

任何人都可以提供帮助吗?

感谢。

1 个答案:

答案 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的内容,然后在浏览器外部编写脚本以模仿该操作。运气好的话,你不需要加载图片。