4

ページソースを取得するためにWebクライアントを使用しています。初めてページソースを取得しています。同じオブジェクトを使用して別のURLのページソースを取得すると、次のような例外が表示されます。

java.lang.ClassCastException: com.gargoylesoftware.htmlunit.UnexpectedPage cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlPage

これは私が使用しているコードです。

HtmlPage firstPage = webClient.getPage("firsturl");
HtmlPage downloadPage = null;
        try {
            webClient.setJavaScriptEnabled(true);

            downloadPage = (HtmlPage) webClient.getPage("secondurl");
        } catch (Exception e) {
            e.printStackTrace();
        }

事前にThx

4

2 に答える 2

1

それは非常に明確に言っています、あなたのコードは次のことをしています:

downloadPage = (HtmlPage) webClient.getPage("secondurl");

したがって、タイプのオブジェクトを取得していると想定しますが、HtmlPage実際にはタイプのオブジェクトを取得しています UnexpectedPage

instanceofのチェックを追加する必要があります。

If (webClient.getPage("secondurl") instanceof HtmlPage){
downloadPage = (HtmlPage) webClient.getPage("secondurl");
}
else{
//do something
}
于 2012-07-01T09:24:01.063 に答える
1

UnexpectedPageはHtmlPageのサブタイプであると(ライブラリをあまりよく知らなくても)推測します(そうでない場合は、それが問題の原因です)。

この場合、クラスパスにこれらのクラスが2回ある可能性があります。クラスHtmlPageの「名前」は正当なスーパークラスのように見えますが、クラスローダーは同じ名前の2つのクラスにアクセスし、最初に「もう一方」をロードします。

クラスパスに2回表示されるHtmlUnitクラスをチェック(ダブルチェック)します。

于 2012-07-01T09:29:03.737 に答える