我正试图从Stackoverflow主页中获取问题标题。 我的噩梦.JS代码如下。
var Nightmare = require('nightmare');
var startingLink = "http://stackoverflow.com"
var nightmare = Nightmare({show:true});
nightmare
.goto(startingLink)
.evaluate(function() {
return document.getElementsByClassName('question-hyperlink')
})
.end()
.then(function(content) {
console.log(content);
})
当我在Chrome控制台中运行时,它可以正常工作。
然而,在噩梦中,这是我的输出。
ming_o01 (master) nightmare1 $ DEBUG=nightmare node stackoverflow.js
'48': {},
'49': {},
'50': {},
'51': {},
'52': {},
'53': {},
'54': {},
'55': {},
'56': {},
'57': {},
'58': {},
'59': {},
'60': {},
'61': {},
'62': {},
'63': {},
'64': {},
'65': {},
'66': {},
'67': {},
'68': {},
'69': {},
'70': {},
'71': {},
'72': {},
'73': {},
'74': {},
'75': {},
'76': {},
'77': {},
'78': {},
'79': {},
'80': {},
'81': {},
'82': {},
'83': {},
'84': {},
'85': {},
'86': {},
'87': {},
'88': {},
'89': {},
'90': {},
'91': {},
'92': {},
'93': {},
'94': {},
'95': {} }
ming_o01 (master) nightmare1 $
欣赏我的物品为何空的建议。有关结果的HTML和Chrome控制台的屏幕截图,请参阅图片
答案 0 :(得分:2)
(注意:此对话是来自segmentio/nightmare#617的端口。)
我怀疑DOMElement的部件是不可枚举的,因此不会越过IPC边界。换句话说,它不会很好地序列化。
修复它非常简单:在.evaluate()
内插入所需的值。假设您想要问题标题和链接:
var Nightmare = require('nightmare');
var startingLink = "http://stackoverflow.com"
var nightmare = Nightmare({
show: true
});
nightmare
.goto(startingLink)
.evaluate(function() {
var elements = Array.from(document.getElementsByClassName('question-hyperlink'));
return elements.map(function(element) {
return {
href: element.href,
title: element.innerText
}
});
})
.end()
.then(function(content) {
console.log(content);
})
请注意,Array.from
的使用是故意的:document.getElementsByClassName()
会返回一个类似于数组的对象,称为HTMLCollection
。