2017-05-29 50 views
0

我想通过Nightmare.js获取NodeList迭代。在开发工具中执行按预期执行,但在ElectronI中无法成功将NodeList转换为数组。电子Nightmare.js 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); 
 
    }) 
 

我试着通过各种方法移植的节点列表。没有任何接缝可以在Electron中工作。再次,这在铬工具中很容易实现。

回答

0

问题是HTMLElements或节点在页面上下文中有效。任何需要从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); 
    }); 

如果你需要通过不同的评估()步骤的元素,那么你可以有它的解决方法,但这是不同的故事