42 votes

Ecrire les résultats dans un fichier en utilisant CasperJS

Comment créer un fichier dans le système de fichiers et y placer le contenu de this.getPageContent() ?

69voto

Henry Points 560
 var fs = require('fs');
fs.write(myfile, myData, 'w');
 

pour économiser les égratignures quotidiennes, je fais:

 var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var myfile = "data-"+year + "-" + month + "-" + day+".html";
 

10voto

nwaomachux Points 570

Vous pouvez également ajouter à un fichier texte en utilisant la méthode ci-dessous

     var casper = require('casper').create();
    var fs = require('fs');
    var save = fs.pathJoin(fs.workingDirectory, 'nwaomachux', 'data.txt');

    casper.start('http://www.po3w.com/', function() {
        fs.write(save, this.getTitle() + '\n', 'w');
    });

    casper.thenOpen('http://phantomjs.org', function() {
        fs.write(save, this.getTitle(), 'a');
    });

    casper.run();
 
  • Si le dossier nwaomachux n'existe pas encore, il sera automatiquement créé pour vous.
  • Si vous avez enregistré le fichier sous le nom save.js , exécutez-le à partir de PhantomJS à l’aide de la commande suivante sur un ordinateur Linux.

./phantom casperjs / bin / bootstrap.js --casper-path = casperjs --cli save.js

6voto

q0rban Points 123

Voici une fonction d'assistance que vous pouvez utiliser pour ajouter cette fonctionnalité à l'objet casper.

 /**
 * Save page markup to a file. Respect an existing savePageContent function, if
 * casper.js core introduces one.
 * 
 * @param String targetFile
 *   A target filename.
 * @return Casper
 */
casper.savePageContent = casper.savePageContent || function(targetFile) {
  var fs = require('fs');
  var f  = require('utils').format;

  // Get the absolute path.
  targetFile = fs.absolute(targetFile);
  // Let other code modify the path.
  targetFile = this.filter('page.target_filename', targetFile) || targetFile;
  this.log(f("Saving page html to %s", targetFile), "debug");
  // Try saving the file.
  try {
    fs.write(targetFile, this.getPageContent(), 'w');
  } catch(err) {
    this.log(f("Failed to save page html to %s; please check permissions", targetFile), "error");
    this.log(err, "debug");
    return this;
  }

  this.log(f("Page html saved to %s", targetFile), "info");
  // Trigger the page.saved event.
  this.emit('page.saved', targetFile);

  return this;
};
 

Il est utile de noter que, dans ce cas, "fs" n'est pas l'objet Node JS FileSystem, mais plutôt un module PhantomJS .

5voto

Alejandro Silva Points 341

Une fonction ' then ' complète, qui supprime les données d'un site, renvoie un json et la stocke dans un fichier "myFile" devrait ressembler à ceci:

 casper.then(function paso2() {
var jsonStr = this.evaluate(function(){
    var puntos = {};
    puntos.alafecha = document.querySelector('div.cont_item_productos_puntos > p.txt_negro').textContent;
    puntos.totales = document.querySelector('ul.lista_prod_puntos > li.ppuntos_1 > span.ppuntos_2').textContent;
    return JSON.stringify(puntos);
});
console.log("this is a response in json format: "+json);
fs.write('myFile.json', jsonStr, 'w');
});
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X