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

HtmlUnit设置启用JavaScript后仍获取到JS禁用页面问题求助

HtmlUnit获取JS渲染后页面内容的配置调整方案

核心问题说明

你当前代码的第一个错误是直接调用WebResponse.getContentAsString(),该方法返回的是服务器返回的原始未经过JS渲染的HTML内容,和JS是否开启无关。JS执行后修改的DOM结构需要从HtmlPage对象直接获取,而非初始响应对象。

必须补充的配置&代码调整

  • 补充必要的浏览器特性配置
    除了开启JS,还要补充以下配置确保页面渲染逻辑正常执行:
    // 启用JS(你已添加的配置)
    wc.getOptions().setJavaScriptEnabled(true);
    // 禁用脚本错误抛出(你已添加的配置)
    wc.getOptions().setThrowExceptionOnScriptError(false);
    // 禁用HTTP错误状态码抛出,避免4xx/5xx状态码直接中断执行
    wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
    // 启用CSS,部分页面的JS逻辑依赖CSS渲染状态
    wc.getOptions().setCssEnabled(true);
    // 启用本地存储,单页应用普遍依赖localStorage/sessionStorage存储运行数据
    wc.getOptions().setWebStorageEnabled(true);
    
  • 增加异步JS等待逻辑
    页面初始加载完成后,后台还有异步JS在执行渲染逻辑,需要增加等待时间确保渲染完成:
    final HtmlPage page = wc.getPage("https://www.sainsburys.co.uk/gol-ui/SearchResults/biscuits");
    // 等待后台JS执行,最多等待5秒,可根据页面加载速度自行调整时长
    wc.waitForBackgroundJavaScript(5000);
    
  • 替换HTML内容获取方式
    不要使用WebResponse的原始内容,直接从渲染完成的HtmlPage对象中获取最终DOM:
    // 该方法返回JS渲染后的完整DOM结构字符串
    String html = page.asXml();
    
  • 优化文件写入逻辑
    推荐使用try-with-resources自动关闭文件流,避免资源泄漏:
    try (FileWriter fw = new FileWriter(dir + "/pageHtml.txt")) {
        fw.write(html);
    }
    

修正后的完整代码

public static void main(String[] args) throws IOException {
    try (final WebClient wc = new WebClient(BrowserVersion.BEST_SUPPORTED)) {
        // 基础运行配置
        wc.getOptions().setJavaScriptEnabled(true);
        wc.getOptions().setThrowExceptionOnScriptError(false);
        wc.getOptions().setThrowExceptionOnFailingStatusCode(false);
        wc.getOptions().setCssEnabled(true);
        wc.getOptions().setWebStorageEnabled(true);
        
        final HtmlPage page = wc.getPage("https://www.sainsburys.co.uk/gol-ui/SearchResults/biscuits");
        // 等待JS执行完成
        wc.waitForBackgroundJavaScript(5000);
        // 获取渲染后的完整HTML
        String html = page.asXml();
        
        // 写入本地文件
        try (FileWriter fw = new FileWriter(dir + "/pageHtml.txt")) {
            fw.write(html);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:54:02