2016-07-03 13 views
0

PhantomJSのウェブサイトからajaxデータを取得する必要があります。リンクを押すとデータが表示されます。リンクをクリックしてくださいPhantomJS

<div class="show-all-goods"><a href="#">Show all</a></div> 

は、ここに私のコードです:

var page = require('webpage').create(); 
page.open('http://dveri.com/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/', function() { 
    page.includeJs("https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js", function() { 
    page.evaluate(function(){ 
     $('.show-all-goods a').click(); 
    }); 

}); 
console.log(page.content); 
phantom.exit(); 
}); 

しかし、データがロードされません。助けてください

答えて

0

console.log(page.content);という行を使ってデータを表示しようとしている場合は、クリックが発生する前でも実際にこの関数を呼び出しています。

非同期です。

クリックすると、ページのロード後に実行されるとjsが注入され、

残念ながら、PhantomJSはAjaxのコールバックのためのAPIを持っていないサーバーに応じて起こるだろうことを、ネットワーク遅れなどであるとき、あなたは知っていることはありません。

これまで私が似たような状況で行ってきたことは、ajaxコールバックの影響を受ける1つ以上のHTML要素を常に監視するオブザーバを作成することです。例えば、空白のdivがあり、Ajaxコールバックがそれをいくつかのコンテンツで埋めることになっているとします。私はPhantomJSコードでsetIntervalまたはsetTimeoutを作成し、evaluateを呼び出し、そのdivの変更を確認しました。その評価関数から、私が得たものに基づいてブール値を返し、さらなるステップを実行しました。ただし、代わりにconsole.logに入れて、アプリケーションを終了できるコンテンツを返すこともできます。

あなたはwait() waitFor() waitForResource() waitForSelector() waitWhileSelector() waitForSelectorTextChange() waitForText() waitUntilVisible() waitWhileVisible()

のような多くのいずれかのAPIを使用して casperJShttp://casperjs.org/)を使用する場合、これは簡単に行うことができます
関連する問題