作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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()
中的函数内容在浏览器上下文中运行。因此,fs
和 data
不会被提升到您定义的函数范围内。 (您可以阅读有关变量提升和 .evaluate()
here 的更多信息。)
fs.write()
不会按您的预期工作 - fs.write()
is asynchronous .
此外,我怀疑 $(selector).text()
是否会产生您想要的结果 - 我认为这会将每个链接的链接文本连接在一起。我怀疑你想把它们放在一个数组中?
此外,我应该指出 .run()
isn't directly supported .这是一个内部函数,主要是为了兼容性而保留。
最后,看起来您正在使用自定义构建的 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);
})
关于javascript - 如何将数据从 NightmareJS 写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39175845/
我是一名优秀的程序员,十分优秀!