2017-07-16 107 views
0

我现在使用casperjs进行网络爬行。几乎一切都很好,但我遇到了一些麻烦。首先,我的代码如下所示。casperjs评估函数返回无效值

casper.start().each(SOME_URLS, function(self, URL) { 
    self.thenOpen(URL, function() { 

     self.then(function() { 
      var getDatas = function() { 
       var title = $('SOME_SELECTOR').map(function() { 
        return $(this).text(); 
       }).get(); 

       return { 
        title: title 
       }; 
      } 

      data = self.evaluate(getDatas); 
      console.log(JSON.stringify(data)); 
     }); 

    }); 
}).run(); 

我想从网页获取一些数据到'数据'变量。有时数据非常好(在console.log上),但有时数据是空的!

为什么会发生这种情况?我错了什么?

+0

它看起来像你使用jQuery,如果你不把它添加到您的卡斯帕用户代理没有保证,无论网站你刮加载它。这可能是问题吗?也可能是您的数据分配按错误顺序运行,请尝试将其放入单独的casper.then()中。另外,请提供链接到网站,它的工作原理并不能帮助人们找到答案。 –

回答

0

问题是你不能拨打casper.start不止一次。您的循环需要在casper.start功能内或casper.then

请参阅此excellent SO answer以帮助您执行此操作。

基本上只能调用casper.start一次,把你的循环内casper.then