我正在尝试迭代通过Nightmare.js获得的一个Nightmare.js。在dev工具中执行按预期执行,但在ElectronI中不能成功地将NodeList转换为数组。
nightmare
.goto('https://www.somePage.com')
.wait('#someID')
.evaluate(function () {
var links = document.querySelectorAll('div.someClass')
return links;
})
.end()
.then(function (result) {
console.log(result); // outputs the NodeList successfully.
var nodesArray = Array.prototype.slice.call(result);
console.log(nodesArray.length) // Always 0
})
.catch(function (error) {
console.error('Failed',
error);
})
我尝试过通过各种其他方法移植NodeList。没有任何缝能在电子里工作。同样,这在镀铬工具中很容易实现。
发布于 2017-06-22 20:56:08
问题是HTMLElements或节点在页面上下文中是有效的。任何需要从估价()传递到然后()的内容都是使用nightmare.ipc模块内部发送的。这意味着返回的值被转换为string (JSON.stringify),然后创建返回。
如果检查开发人员控制台日志,就会看到转换错误。
您可以在计算函数本身中计算长度并传递它。
nightmare
.goto(url)
.evaluate(function(selector) {
var links = document.querySelectorAll(selector)
return links.length;
}, selector)
.then(function(result) {
console.log(result); // Outputs length.
})
.catch(function(error) {
console.error('Failed', error);
});如果您需要在不同的计算()步骤中传递元素,那么您可以找到解决方法,但这是不同的。
https://stackoverflow.com/questions/44249472
复制相似问题