5

htmlunitを使用してWebサイトを自動的に通過しています。ここに問題があります:

特定のテーブルの新しいページを表示するために、アンカーをクリックしたいと思います。

これがアンカーです:

<a href="javascript:__doPostBack('GridView1','Page$7')">7</a>

これが私のコードです:

final HtmlAnchor a = page2.getAnchorByText("7");
HtmlPage page3 = a.click();
System.out.println(page2.getWebResponse().getContentAsString())
System.out.println(page3.getWebResponse().getContentAsString());

エラーメッセージはありません。印刷物を比較すると、同じですが、アンカーをクリックしただけなので、同じではないはずです。最初の印刷では表の特定のページが表示され、2番目の印刷では別のページが表示されます。

htmlunit内のリンクをクリックするのに苦労しているstackoverflowの投稿は、非常によく似た問題を引き起こしますが、私の場合、彼の解決策(ブラウザーのバージョンをwebclientに設定する)は機能しないようです。

4

2 に答える 2

6

たぶん、JavaScriptが実行されて最初にロードされるのを待つ必要があります。次のコマンドを使用することをお勧めします。

webClient.waitForBackgroundJavaScript(1000);

あるいは:

JavaScriptJobManager manager = page.getEnclosingWindow().getJobManager();
while (manager.getJobCount() > 0) {
    Thread.sleep(100);
}

そしてさらに別のオプション:

webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.setAjaxController(new AjaxController(){
    @Override
    public boolean processSynchron(HtmlPage page, WebRequest request, boolean async)
    {
        return true;
    }
});
于 2013-12-18T00:54:34.193 に答える
0

最終的なHtmlAnchora= page2.getAnchorByText( "7"); HtmlPage page3 = a.click();

//このclient.waitForBackgroundJavaScriptStartingBefore(10000);を追加します ここでclient.waitForBackgroundJavaScriptStartingBefore(10000);

System.out.println(page2.getWebResponse()。getContentAsString())System.out.println(page3.getWebResponse()。getContentAsString());

于 2020-05-12T18:00:30.610 に答える