2017-05-29 34 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); 
    }); 

如果你需要通過不同的評估()步驟的元素,那麼你可以有它的解決方法,但這是不同的故事