Electron Nightmare.js NodeList to Array

时间:2017-05-29 19:41:55

标签: node.js electron nightmare nodelist

我试图遍历通过Nightmare.js获得的NodeList。在开发工具中执行按预期执行,但在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。在Electron中没有任何接缝可以工作。同样,这在chrome工具中很容易实现。

1 个答案:

答案 0 :(得分:0)

问题是HTMLElements或Nodes在页面上下文中是有效的。需要从evaluate()传递到then()的任何内容都是使用nightmare.ipc模块在内部发送的。这意味着返回的值将转换为字符串(JSON.stringify),然后再创建。

如果您查看开发者控制台日志,则会看到转换错误。

您可以评估evaluate函数本身的长度并传递它。

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

如果您需要在不同的evaluate()步骤中传递元素,那么您可以为它设置解决方法,但这是不同的故事