You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级HtmlUnit至2.70:如何替代HtmlParser.parseHtml()方法

HtmlUnit 2.70 替代 HtmlParser.parseHtml() 的正确方式

在HtmlUnit 2.70版本中,旧的静态方法HtmlParser.parseHtml()已被移除,直接手动实例化HtmlPage和解析器会因缺失页面上下文(如脚本执行所需对象)报错,以下是两种可行的替代方案:

方案1:使用WebClient(推荐)

这是HtmlUnit的标准使用方式,WebClient会自动处理页面初始化和解析流程,避免上下文缺失问题:

// 初始化WebClient,可根据需求配置参数
WebClient webClient = new WebClient();
// 可选配置:比如禁用JavaScript(如果不需要脚本执行)
webClient.getOptions().setJavaScriptEnabled(false);

// 情况1:已有WebResponse对象时直接解析
HtmlPage htmlPage = webClient.getPage(tmpResponse);

// 情况2:从原始HTML字符串构造页面
String rawHtml = "<html><body>...</body></html>";
WebResponseData responseData = new WebResponseData(
    rawHtml.getBytes(StandardCharsets.UTF_8),
    200,
    "OK",
    new WebHeaderCollection()
);
URL targetUrl = new URL("https://your-target-url.com");
WebResponse response = new WebResponse(
    responseData,
    targetUrl,
    HttpMethod.GET,
    System.currentTimeMillis()
);
HtmlPage pageFromHtml = webClient.getPage(response);

方案2:使用PageCreator(底层场景适用)

如果需要更底层的控制,可通过WebClient的PageCreator来创建页面,它会自动完成页面上下文的初始化:

WebClient webClient = new WebClient();
PageCreator pageCreator = webClient.getPageCreator();

// 通过PageCreator创建HtmlPage,自动初始化所有必要组件
HtmlPage htmlPage = (HtmlPage) pageCreator.createPage(tmpResponse, tmpWebWindow);

错误原因说明

你直接通过new HtmlPage(tmpResponse, tmpWebWindow)创建页面的方式,跳过了HtmlUnit内部的初始化流程,页面所需的脚本关联对象(ScriptObject)未被正确实例化,因此调用parse方法时触发"No script object associated with the Page"错误。必须通过WebClient或PageCreator工厂类创建页面,才能保证所有依赖组件初始化完成。

内容的提问来源于stack exchange,提问作者carlos palma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 16:02:48