2

当我执行这个简单的代码以将网站的内容作为文本获取时,它会显示我无法理解的错误。

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::setThrowExceptionOnScriptError自 HtmlUnit 版本 2.11 起,该方法已被弃用。在较新版本中使用以下内容:

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

将您的 webClient 设置为不抛出 javascript 异常

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 以抑制错误的选项适用于基本网站。但是随着网站变得复杂,它确实失败了

经过多次尝试,我最终不得不选择Phantomjs。它是用 C++ 编写的。我不得不编写一些脚本,然后使用 phantomjs执行它。该脚本将加载 url 并将数据写入文件。

一旦该文件准备就绪,我将编写一个 java 程序来加载文件数据,然后对该文件执行我的操作。为了加载和抓取数据,我使用了Jsoup

如您所见,HtmlUnit、Jaunt、Jsoup 支持完整的 HTML、CSS。他们缺少的是他们不完全支持Javascript。这是引发异常、未加载完整页面等错误的主要原因。

于 2016-11-29T17:22:00.957 回答