NightmareJS将变量保存到文件

时间:2016-11-18 17:24:04

标签: json node.js phantomjs nightmare

以下代码适用于NightmareJS和NodeJS。但是,我不想只是在console.log中获取JSON结果,而是希望将我的JSON结果保存到本地文件中。

我知道Nightmare中的.html选项,但我不想要整个页面,我希望它以JSON格式。有关将ticketData保存到本地文件的任何帮助吗?

nightmare
  .goto('https://www.stubhub.com/')
  .wait(3000)
  .type('.inputbox', 'chicago bulls')
  .mouseover('.search-action-button')
  .click('.search-action-button')
  .wait(3000)
  .evaluate(function () {
    var ticketData = {}

ticketData.team = ([].slice.call(document.querySelectorAll('.event-title'))).map( function(x) {
  return x.innerText
});

ticketData.date = ([].slice.call(document.querySelectorAll('.date-stamp-month-dd'))).map( function(x) {
  return x.innerText
});

ticketData.price = ([].slice.call(document.querySelectorAll('.price'))).map( function(x) {
  return x.innerText
});

ticketData.url = ([].slice.call(document.querySelectorAll('.event-link'))).map( function(x) {
  return x.href
});

return ticketData;
  })
  .then(function (data) {
    console.log('Data = ' + JSON.stringify(data));
    return nightmare
  })
  .catch(function (error) {
    console.error('', error);
  });

2 个答案:

答案 0 :(得分:4)

您需要使用fs module个phantomjs和fs.write function

var fs = require('fs');
fs.write('ticket_data', JSON.stringify(data), 'w');

fs module Node.JS和fs.writeFileSync function

var fs = require('fs');
fs.writeFileSync('ticket_data', JSON.stringify(data));

例如:

var fs = require('fs');
.then(function (data) {
fs.writeFileSync('ticket_data', JSON.stringify(data));
//  fs.write('ticket_data', JSON.stringify(data), 'w');
//  console.log('Data = ' +JSON.stringify(data))
});

答案 1 :(得分:2)

我有完全相同的需求,并使用以下语法来"漂亮的打印" JSON内容到文件。

var writeToFile = function() {
  fs.writeFile(setupFilePath, JSON.stringify(data, null, 4), function(err) {
    if(err) { 
      // handle error
    }
  });
}

这里要注意的一件事是传递给JSON.stringify()的附加参数 - 这将缩进每行4个空格以获得额外的可读性。关于here的更多信息。

我必须非常清楚我的文件路径,其定义如下:

var setupFilePath = __dirname + '/../../setup_info.json';