【问题标题】:Error while using HtmlUnit使用 HtmlUnit 时出错
【发布时间】:2012-06-28 16:47:35
【问题描述】:

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

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//////////////////////////"); 
    }

}

我得到的错误:

======= 异常开始 ======== 异常 class=[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)

【问题讨论】:

    标签: java javascript web web-scraping htmlunit


    【解决方案1】:

    自 HtmlUnit 版本 2.11 起,WebClient::setThrowExceptionOnScriptError 方法已被弃用。在较新的版本中使用以下内容:

    webClient.getOptions().setThrowExceptionOnScriptError(false);
    

    【讨论】:

      【解决方案2】:

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

      webClient.setThrowExceptionOnScriptError(false);

      如果不够,请在初始化 Web 客户端时将 FF 设置为客户端行为。

      webClient = new WebClient(BrowserVersion.FIREFOX_3_6); webClient = new WebClient(BrowserVersion.FIREFOX_10); // 取决于 HtmlUnit 版本

      【讨论】:

        【解决方案3】:

        即使我也有这个错误。此设置 WebClient 以抑制错误的选项适用于基本网站。但随着网站变得复杂,它确实失败了

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          • 1970-01-01
          • 2013-12-16
          • 1970-01-01
          相关资源
          最近更新 更多