GWT ベースのページがあり、HtmlUnit を使用してそのページの HTML スナップショットを作成したいと考えています。ページは製品の Ajax/JavaScript 情報を使用して読み込まれるため、約 1 秒間「読み込み中...」というメッセージが表示され、その後コンテンツが表示されます。
問題は、HtmlUnit が情報をキャプチャしていないようで、「読み込み中...」というスパンしか表示されないことです。
以下は、HtmlUnit を使用した実験的なコードです。データの読み込みを待つのに十分な時間を与えようとしましたが、何も変わらないようで、GWT JavaScript によって読み込まれたデータをキャプチャすることはできません。
WebClient webClient = new WebClient();
webClient.setJavaScriptEnabled(true);
webClient.setThrowExceptionOnScriptError(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
WebRequest request = new WebRequest(new URL("<my_url>"));
HtmlPage page = webClient.getPage(request);
int i = webClient.waitForBackgroundJavaScript(1000);
while (i > 0)
{
i = webClient.waitForBackgroundJavaScript(1000);
if (i == 0)
{
break;
}
synchronized (page)
{
System.out.println("wait");
page.wait(500);
}
}
webClient.getAjaxController().processSynchron(page, request, false);
System.out.println(page.asXml());
何か案は...?
ベストアンサー1
ご返信ありがとうございます。実は、自分で解決策を見つけたので、もっと早く報告すべきでした。どうやら、FF で WebClient を初期化するときに、次のようになります。
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
動作しているようです。WebClient をデフォルト コンストラクターで初期化すると、デフォルトで IE7 が使用され、FF の方が Ajax のサポートが優れているため、使用が推奨されるエミュレーターだと思います。