1

特定の Web サイトから情報をスクレイピングしようとしています。このサイトは最初に認証を使用するため、ai はzombie.js を使用します。

var Browser = require("zombie");
var browser = new Browser();
browser.visit("https://*****login.aspx", function(){
    browser.fill('#user', '*****');
    browser.fill('#pwd', '*****');
    var button = browser.querySelector('#btnSubmit');
    browser.fire('click', button, function(){
    //scraping main.aspx
    });
});

それは機能しています、私はmain.aspxをこすることができます:<table>新しいメッセージに関する情報(差出人、日付、件名)が含まれています、問題はここにあります:件名フィールドはクリック可能で、それをクリックすると新しいウィンドウが表示されます実際のメッセージ。ただし、これは ajaxgrid であり、クリックを実行すると:

var field = browser.querySelector('#VeryLongIdOfTheField');
browser.fire('click', field, function(){    
    console.log(browser.querySelector('#VeryLongIdOfTheFieldContainingTheMessage').innerHTML);
});

undefined には innerHTML がないことを示すエラー メッセージが返されます。このアクションが ajax マジックで処理されたためだと思います。私はこの js/nodejs/jquery/.. の世界で初めてです。私を啓発するためにいくつかの助けが必要です。

4

1 に答える 1

0

データは非同期ajaxを使用して入力されるため、クリックとノード内の実際のDOM入力との間に遅れがあると思います。ノード内のコンテンツを確認する前に少し待ってはどうでしょうか。

browser.fire('click', field, function(){
  setTimeout(function(){
    console.log(browser.querySelector('#VeryLongIdOfTheFieldContainingTheMessage').innerHTML);
  }, 3000)
});

所要時間があまり予測できない場合は、コンテンツが見つかるまでループ内で実行するか、妥当な回数の再試行後に終了することもできます。

于 2012-11-03T14:19:06.043 に答える