簡體   English   中英

如何將NightmareJS中的數據寫入文件

[英]How do I write data from NightmareJS to file

我是JavaScript,node.js和NightmareJS的新手。

我在下面寫了一個簡單的腳本來從網頁中提取一些文本,我想將它保存到文件中。

var nightmare = require('nightmare');
var data = [];
var fs = require('fs');

var usda = new nightmare()
.goto('yyyy')
.wait(20000)
.inject('js', 'jquery.js')
.evaluate(function(){  
  data = $x('//a').text();  
  fs.write("testOutput.json", JSON.stringify(data), 'w');
})
.end()
.run(function (err, nightmare) {
    if (err) return console.log(err);
    console.log('Done!');
});

我一直收到如下錯誤:

return binding.writeString(fd, buffer, offset, length, req);
             ^
TypeError: First argument must be file descriptor

.evaluate()內的函數內容在瀏覽器上下文中運行。 因此, fsdata不會被提升到您定義的功能范圍內。 (您可以在此處閱讀有關變量提升和.evaluate()更多信息。)

fs.write()將無法正常工作 - fs.write()是異步的

另外,我懷疑$(selector).text()會產生你想要的結果 - 我認為這會將每個鏈接的鏈接文本連接在一起。 懷疑你想要他們在一個陣列?

此外,我應該指出.run()不是直接支持的 這是一個內部功能,主要是為了保持兼容性。

最后,看起來你正在使用自定義構建的jQuery或第三方庫來獲得XPath支持。 將來,包含這些信息會很有幫助。

所有這些都說,讓我們修補你的例子讓你開始。 袖口,這樣的東西應該工作:

var nightmare = require('nightmare');
var fs = require('fs');

var usda = new nightmare()
.goto('yyyy')
.wait(20000)
.inject('js', 'jquery.js')
.evaluate(function(){
  //using 'a', but this could be swapped for your xpath selector
  return $('a').toArray().map((a) => $(a).text());
})
.end()
.then(function(anchors){
  fs.writeFileSync('testOutput.json', JSON.stringify(anchors));
  console.log('Done!');
});
.catch(function(err){
  console.log(err);
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM