3

我想知道是否有人能够让 HtmlUnit 在 Android 下运行?

我有一个使用 Jsoup 抓取的网站(效果很好)。但是,其中一个部分包含超过 2 页。该站点使用 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;

然后应用力关闭。这个问题与此类似:How do I get HtmlUnit to work under Android? WebClient 的 HtmlUnit Android 问题

我使用 HtmlUnit 的唯一原因是能够在该页面上运行 Javascript。我愿意接受任何可能让我做类似事情的替代方案。

谢谢

4

2 回答 2

0

不要使用 htmlUnit。

你会认为你只需要几个核心罐子。不,您可能需要所有这些,否则您可能会遇到一些未找到的类错误。

看看在运行 Eclipse 之前必须加载多少个 jar!一共21个罐子,超过10mb!请记住,您还可以为 Android Market 打包最多 50mb。它只会减慢 Eclipse 的速度,并且您可能必须在调试时增加内存。

改用 Jsoup!

于 2013-05-20T16:50:34.140 回答
0

HtmlUnit(使用HttpClient)和部分集成在android jdk中的HttpClient版本之间存在类版本冲突。

要解决此问题,您可以使用https://github.com/HtmlUnit/htmlunit-android项目中的分发。

请尝试并报告任何问题。

于 2022-02-19T12:34:31.997 回答