2

この単純なコードを実行してWebサイトのコンテンツをテキストとして取得すると、理解できないエラーが表示されます。

import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.ScriptException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class sd {
    public static void main(String[] args) {
        sd vip=new sd();
        try {
            vip.homePage();
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.print("sssss");
    }

    public void homePage() throws Exception, ScriptException {
        final WebClient webClient = new WebClient();
        final HtmlPage page =       
    (HtmlPage)webClient.getPage("http://timesofindia.indiatimes.com/");
        String pageAsText = page.asText();
        String pageAsXML = page.asXml();

        // System.out.println(pageAsXML);
        System.out.println("////////////////////output//////////////////////////"); 
        System.out.println(pageAsText);
        // System.out.println(pageAsXML);
        System.out.println("////////////////////output ends//////////////////////////"); 
    }

}

私が得るエラー:

   =======例外開始========
例外クラス=[com.gargoylesoftware.htmlunit.ScriptException]
com.gargoylesoftware.htmlunit.ScriptException:jsxFunction_writeを呼び出す例外
    com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine $ HtmlUnitContextAction.run(JavaScriptEngine.java:595)で
原因:java.lang.RuntimeException:jsxFunction_writeを呼び出す例外
原因:com.gargoylesoftware.htmlunit.ScriptException:jsxFunction_writeを呼び出す例外
    com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine $ HtmlUnitContextAction.run(JavaScriptEngine.java:595)で
4

3 に答える 3

24

WebClient::setThrowExceptionOnScriptErrorHtmlUnitバージョン2.11以降、このメソッドは非推奨になりました。新しいバージョンでは、以下を使用してください。

webClient.getOptions().setThrowExceptionOnScriptError(false);
于 2013-10-31T14:11:02.727 に答える
6

javascript例外をスローしないようにwebClientを設定します

webClient.setThrowExceptionOnScriptError(false);

十分でない場合は、Webクライアントを初期化するときのクライアントの動作としてFFを設定します。

webClient = new WebClient(BrowserVersion.FIREFOX_3_6); webClient = new WebClient(BrowserVersion.FIREFOX_10); //HtmlUnitのバージョンによって異なります

于 2012-06-29T11:15:40.260 に答える
0

私でさえこのエラーがありました。エラーを抑制するようにWebClientを設定するこのオプションは、基本的なWebサイトで機能します。しかし、ウェブサイトが複雑になると、文字通り失敗します

何度か試した後、私はついにPhantomjsを選ばなければなりませんでした。C++で書かれています。スクリプトをいくつか作成してから、phantomjsを使用して実行する必要がありました。スクリプトはURLをロードし、データをファイルに書き込みます。

そのファイルの準備ができたら、ファイルデータをロードするJavaプログラムを作成し、そのファイルに対して操作を実行します。データのロードとスクレイピングには、Jsoupを使用していました。

ご覧のとおり、HtmlUnit、Jaunt、Jsoupは完全なHTML、CSSをサポートしています。彼らが欠けているのは、Javascriptを完全にサポートしていないということです。これが、例外がスローされたり、ページ全体が読み込まれないなどのエラーの主な理由です。

于 2016-11-29T17:22:00.957 に答える