2012-11-15 135 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' –