2012-11-15 9 views
7

私はURLの配列を持っていると言います。私はthenOpen関数を使いたくない。以前のすべてのURLがロードされるのを待つので、ロード時間が短くなります。CasperJS同時リクエスト

casper.each(hrefs,function(self,href){ 
     self.thenOpen(href,function(){ }); 
     self.then(function(){ 
     // Selectors 
    }); 

});

上記の方法と比較して、どのような方法で費やすことができますか? db内に複数のインスタンスストアを作成してからフェッチするのは効率的でしょうか?しかし、これは頭痛の種です。また、同じjsファイルの複数のインスタンスを同時に実行すると問題が発生するのでしょうか?

答えて

9

開いているすべてのURL間で動作を同期させたくない場合は、各URLに対して複数のcasperインスタンスを起動する必要があります。ここに例があります:

var casperActions = { 
    href1: function (casper) { 
    casper.start(address, function() {...}); 
    // tests and what not for href1 
    casper.run(function() {...}); 
    }, 
    href2: function (casper) { 
    casper.start(address, function() {...}); 
    // tests and what not for href2 
    casper.run(function() {...}); 
    }, 
    ... 
}; 

['href1', 'href2', ...].each(function(href) { 
    var casper1 = require('casper').create(); 
    casperActions[href](casper); 
}); 

各インスタンスは互いに独立して実行されますが、複数のURLを同時にヒットすることができます。あなたが手順の配列を配列決定する仕上げされている各操作を待つしたい場合は、キャスパーこのサンプル出荷を見て

+0

私はあなたのコードが動作するように得ることはありません。次のエラーが発生します:** [TypeError: 'undefined'は関数ではありません(['href1'、 'href2'] each ')]] **なぜそれが未定義であるか考えていますか?前もって感謝します! – Hammerfaust

+0

'['href1'、 'href2'] .forEach'の代わりに' ['href1'、 'href2']を使います。それぞれ ' –

関連する問題