Electron Nightmare.js NodeList转数组

Electron Nightmare.js NodeList to Array

我正在尝试遍历通过 Nightmare.js 获得的 NodeList。在开发工具中执行按预期执行,但在 Electron 中我无法将 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 工具中很容易实现。

问题是 HTML 元素或节点在页面上下文中有效。任何需要从 evaluate() 传递到 then() 的东西都使用 nightmare.ipc 模块在内部发送。这意味着返回值被转换为字符串 (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);
  });

如果您需要在不同的 evaluate() 步骤中传递元素,那么您可以有解决方法,但那是另一回事