2017-01-07 9 views
0

ログインが必要なウェブサイトからデータをスクラップしようとしています。残念ながら、JSDom/NodeJSを使用して別の結果を得ています。これは、FFなどのWebブラウザを使用する場合とは異なります。特に、ユーザー名、パスワード、送信ボタンを使ってフォームにログインしているわけではありません。NodeJS/JSDomをスクラップする前に完全レンダリング待ちにする

私はJavascriptの多くを理解していますが、少なくとも非同期です。しかし、私は、JSDomの "done"関数がページの完全なレンダリングを同期して待つと思っていました。私は、HTTPSをシミュレートし、完全なdocument.readyが完了するのを待つことをやりたいと思います。

var jsdom = require("jsdom"); 
var jsdom_global = require("jsdom-global"); 
var fs = require("fs"); 
var jquery = fs.readFileSync("./jquery-3.1.1.min.js", "utf-8"); 

jsdom.env({ 
    url: "https://wemc.smarthub.coop/Login.html#login:", 
    src: [jquery], 
    done: function (err, window) { 
    var $ = window.$; 
    if($("button#LoginSubmitButton").length) { 
     console.log('Click button found'); 
    } else { 
     console.log('Click button not found'); 
    } 
    // The following text boxes are not coming back: 
    // $("input#LoginUsernameTextBox") 
    // $("input#LoginPasswordTextBox") 

    // If I enable the line below, I see a lot less than I would if I 
    // do a view source in any reasonable browser. 
    //console.log($("body").html()); 


    } 
}); 

答えて

1

通常、JSDOMはページにヒットしたときにJSを実行しないため、これが発生します。その場合、返される要素はHTMLで表示されるサーバーだけです。

PhantomJSなどのヘッドレスブラウザモジュールを試してみて、それがどのように役立つかを確認することができます。両者の区別に関するセクションがあります。JSDOM github page.

関連する問題