2016-05-04 13 views
1

私はStackoverflowホームページから質問タイトルをつかむようにしています。 私の悪夢は以下のコードです。nightmarejs document.getElementsByClassName()空のオブジェクトを返します

var Nightmare = require('nightmare'); 
var startingLink = "http://stackoverflow.com" 

var nightmare = Nightmare({show:true}); 

nightmare 
    .goto(startingLink) 
    .evaluate(function() { 
     return document.getElementsByClassName('question-hyperlink') 
    }) 
    .end() 
    .then(function(content) { 
     console.log(content); 
    }) 

これはChrome搭載のコンソールで動作します。

Results Chrome Console

しかし、nightmareJSにこれが私の出力です。

ming_o01 (master) nightmare1 $ DEBUG=nightmare node stackoverflow.js 
    '48': {}, 
    '49': {}, 
    '50': {}, 
    '51': {}, 
    '52': {}, 
    '53': {}, 
    '54': {}, 
    '55': {}, 
    '56': {}, 
    '57': {}, 
    '58': {}, 
    '59': {}, 
    '60': {}, 
    '61': {}, 
    '62': {}, 
    '63': {}, 
    '64': {}, 
    '65': {}, 
    '66': {}, 
    '67': {}, 
    '68': {}, 
    '69': {}, 
    '70': {}, 
    '71': {}, 
    '72': {}, 
    '73': {}, 
    '74': {}, 
    '75': {}, 
    '76': {}, 
    '77': {}, 
    '78': {}, 
    '79': {}, 
    '80': {}, 
    '81': {}, 
    '82': {}, 
    '83': {}, 
    '84': {}, 
    '85': {}, 
    '86': {}, 
    '87': {}, 
    '88': {}, 
    '89': {}, 
    '90': {}, 
    '91': {}, 
    '92': {}, 
    '93': {}, 
    '94': {}, 
    '95': {} } 
ming_o01 (master) nightmare1 $ 

私のオブジェクトが空である理由について助言してください。結果が表示されたHTMLとChromeコンソールのスクリーンショットについては、画像を参照してください。

+0

匿名のdownvoterあなたがなぜdownvotedを説明する気に? – thepiercingarrow

答えて

1

(注:この会話はsegmentio/nightmare#617からポートです。)

私がDOMElementのの部品が非可算であることを疑い、そのようにIPCの境界を越えていません。言い換えれば、それはうまくシリアル化されません。

固定するのはかなり簡単です。.evaluate()の中に入れたい値を選びます。 Array.fromの使用が意図的であることを

var Nightmare = require('nightmare'); 
var startingLink = "http://stackoverflow.com" 

var nightmare = Nightmare({ 
    show: true 
}); 

nightmare 
    .goto(startingLink) 
    .evaluate(function() { 
    var elements = Array.from(document.getElementsByClassName('question-hyperlink')); 
    return elements.map(function(element) { 
     return { 
     href: element.href, 
     title: element.innerText 
     } 
    }); 
    }) 
    .end() 
    .then(function(content) { 
    console.log(content); 
    }) 

注:HTMLCollectionとして知られている配列のようなオブジェクトを返しますdocument.getElementsByClassName()あなたが質問のタイトルとリンクを望んでいたと言います。

関連する問題