2012-11-15 171 views
7

可以說我有一系列的網址。我不想使用thenOpen函數。由於它等待每一個先前的url被加載,並且它減少了加載時間。CasperJS同步請求

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

});

與上述方法相比,您將使用哪些方法花費少得多?創建多個實例存儲在數據庫中然後獲取...會是高效的嗎?但是這非常令人頭疼。並且還希望你也能夠在一般情況下回答我會在同時運行同一個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); 
}); 

每個實例將獨立運行,但它可以讓你同時擊中很多網址。

+0

我不明白你的代碼工作。發生以下錯誤:** [TypeError:'undefined'不是函數(評估'['href1','href2']。each')] **你有沒有想法爲什麼它是未定義的?提前致謝! – Hammerfaust

+0

使用'['href1','href2']。forEach'而不是'['href1','href2'] each' –