NightmareJS如何将变量保存到文件中

3
下面的代码可以与 NightmareJS 和 NodeJS 一起使用。但是我不想仅仅将我的 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个回答

4

您需要使用phantomjs的fs模块fs.write函数

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

或者使用Node.JS的fs模块fs.writeFileSync函数

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

2
我有同样的需求,并使用以下语法将JSON内容“漂亮打印”到文件中。
var writeToFile = function() {
  fs.writeFile(setupFilePath, JSON.stringify(data, null, 4), function(err) {
    if(err) { 
      // handle error
    }
  });
}

这里需要注意的是传递给 JSON.stringify() 的额外参数,它会缩进每行 4 个空格以增加可读性。有关更多信息,请参阅此处

我必须非常明确地定义我的文件路径,如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接