使用CasperJS将结果写入文件

nar*_*rek 42 javascript casperjs

如何在文件系统中创建文件并将其内容this.getPageContent()放入其中?

Hen*_*nry 69

var fs = require('fs');
fs.write(myfile, myData, 'w');
Run Code Online (Sandbox Code Playgroud)

为了节省每日刮擦我做:

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

  • @abbood`fs`是[PhantomJS模块](https://github.com/ariya/phantomjs/wiki/API-Reference-FileSystem),而不是NodeJS模块. (36认同)
  • 是吧?从什么时候开始在casperjs中使用节点模块? (4认同)
  • 我想评论一下,我通过创建一个空白模块文件和module.exports对Node脚本的require调用,将Node模块导入Casper脚本.我可以将这些代理模块导入到casper脚本中并使用节点模块而不会出现任何问题.即使在caspers测试环境中. (3认同)

iCh*_*hux 10

您还可以使用以下方法附加到文本文件

    var casper = require('casper').create();
    var fs = require('fs');
    var fname = new Date().getTime() + '.txt';
    var save = fs.pathJoin(fs.workingDirectory, 'nwaomachux', fname);

    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();
Run Code Online (Sandbox Code Playgroud)
  • 如果文件夹nwaomachux尚不存在,则会自动为您创建.
  • 如果您将文件另存为save.js,请在Linux PC上使用以下命令从PhantomJS运行该文件

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


q0r*_*ban 6

这是一个辅助函数,可用于将此功能添加到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;
};
Run Code Online (Sandbox Code Playgroud)

值得注意的是,在这种情况下,'fs'不是Node JS FileSystem对象,而是PhantomJS模块.


Ale*_*lva 5

一个完整的' then'函数,即废弃来自站点的数据,返回并将其json存储到文件"myFile"应如下所示:

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');
});
Run Code Online (Sandbox Code Playgroud)