3

誰かが HtmlUnit を Android で実行できるかどうか疑問に思っていましたか?

Jsoupを使用してスクレイピングしているサイトがあります(これはうまくいきます)。ただし、セクションの 1 つに 3 ページ以上含まれています。このサイトは ASP.NET を使用しており、次のページへのリンクに Javascript ポストバックを使用しています。その結果、次のページのコンテンツを取得するには、その Javascript を実行する必要があります。これが、HtmlUnit での私の試みの出番です。

次のコードは、Java で完全に機能しました。

WebClient webClient = new WebClient();
webClient.setJavaScriptEnabled(true);
HtmlPage page = null;
webClient.setThrowExceptionOnFailingStatusCode(false);
webClient.setThrowExceptionOnScriptError(false);

            try {
                page = webClient.getPage(URLOne.toString());
            } catch (FailingHttpStatusCodeException e1) {
                e1.printStackTrace();
            } catch (MalformedURLException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }

HtmlAnchor anchor = (HtmlAnchor) page.getAnchorByHref("javascript:__doPostBack('lb_next','')");

            try {
                page = (HtmlPage) anchor.click();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

webClient.closeAllWindows();

Document doc1 = Jsoup.parse(page.asXml());

Android で必要なライブラリをセットアップするときに、xalan、xerces、および xml-apis ( Android の HtmlUnit ) を削除する必要がありました。それらを保持すると、Dalvik エラーへの変換が発生します。

それらがないと、アプリケーションは Android で実行されますが、HtmlUnit を必要とするセクションになると、logcat で次のエラーのいくつかが表示されます。

Could not find method org.apache.http.conn.scheme.Scheme.<init>, referenced from method com.gargoylesoftware.htmlunit.HttpWebConnection.createHttpClient
Could not find method org.w3c.dom.css.CSSStyleDeclaration.getLength, referenced from method com.gargoylesoftware.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration.applyStyleFromSelector
VFY: unable to find class referenced in signature (Lorg/w3c/dom/css/CSSStyleSheet;
VFY: unable to find class referenced in signature (Lorg/w3c/dom/css/CSSStyleDeclaration;

その後、適用力が閉じます。この問題は次のようなものです: HtmlUnit を Android で動作させるにはどうすればよいですか? およびHtmlUnit Android での WebClient の問題

私が HtmlUnit を使用している唯一の理由は、そのページで Javascript を実行できるようにするためです。私は、同様のことを可能にする可能性のある代替案に対してオープンです。

ありがとう

4

2 に答える 2

0

htmlUnit を使用しないでください。

いくつかのコア jar が必要なだけだと思っていたでしょう。いいえ、それらすべてが必要になる場合があります。そうしないと、いくつかのクラスが見つからないというエラーが発生する可能性があります。

Eclipse を実行する前に、Eclipse にロードする必要のある jar の数を見てみましょう。全部で21瓶、10MB以上!Android マーケット用に最大 50 MB をパッケージ化することもできます。Eclipse の速度が低下するだけで、おそらくデバッグ時にメモリを増やす必要があります。

代わりに Jsoup を使用してください。

于 2013-05-20T16:50:34.140 に答える