誰かが 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 を実行できるようにするためです。私は、同様のことを可能にする可能性のある代替案に対してオープンです。
ありがとう