2017-07-16 3 views
0

Ich benutze jetzt Casperjs für Web-Crawler. Fast alles ist gut, aber ich hatte einige Probleme. Zuerst ist mein Code wie folgt.casperjs evaluate Funktion gibt ungültigen Wert zurück

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(); 

Ich möchte einige Daten von der Webseite zu 'Daten' Variable erhalten. Manchmal sind die Daten perfekt (auf console.log), aber manchmal sind die Daten leer!

Warum das passiert? Was habe ich falsch gemacht?

+0

Es sieht aus wie Sie jQuery verwenden, wenn Sie es zu Ihrem casper User-Agent nicht hinzufügen gibt es keine Garantie, dass unabhängig von Website, die Sie kratzen lädt es. Könnte das das Problem sein? Es könnte auch sein, dass Ihre Zuordnung zu Daten in der falschen Reihenfolge ausgeführt wird, versuchen Sie es in eine separate casper.then(). Bitte geben Sie auch Links zu der Website an, auf der sie funktioniert, und arbeiten Sie nicht daran, den Nutzern zu helfen, eine Antwort zu finden. –

Antwort

0

Das Problem ist, dass Sie casper.start nicht mehr als einmal anrufen können. Ihre Schleife muss innerhalb der casper.start Funktion oder innerhalb eines casper.then

Siehe dieses excellent SO answer, um Ihnen dabei zu helfen.

Grundsätzlich rufen nur casper.start einmal und platzieren Sie Ihre Schleife in einem casper.then

Verwandte Themen