2017-05-29 10 views
0

Nightmare.jsで取得したNodeListを反復しようとしています。開発ツールでの実行は期待どおりに実行されますが、ElectronIではNodeListを配列に正常に変換できません。Electron Nightmare.js NodeList to Array

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を移植しようとしました。エレクトーンで働く縫い目はありません。ここでも、これはクロムツールで簡単に実現できます。

答えて

0

HTMLElementsまたはNodesがページのコンテキストで有効であるという問題があります。 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); 
    }); 

あなたは、あなたがそれのための回避策を持つことができます)(評価異なるステップの要素を渡す必要があるが、それは別の話

です