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

Java使用HtmlUnit获取TripAdvisor等页面标题时报JS语法错误如何解决

问题原因

你遇到的报错属于JavaScript兼容问题,和权限无关。HtmlUnit内置的Rhino JavaScript引擎对部分现代网页用到的新ES语法支持度有限,Google首页的JS语法复杂度低所以可以正常解析,而TripAdvisor、YouTube这类站点大量用到新的JS特性,就会触发语法解析错误。

解决方案

  • 方案一:禁用JavaScript(仅需获取静态页面内容时推荐,性能高、报错少)
    如果你只需要抓取页面的标题、点评文本等静态内容,不需要模拟页面交互、执行JS动态加载内容,可以直接关闭JS解析,修改代码如下:
@Test
public void getPageName() throws Exception {
    try (final WebClient webClient = new WebClient()) {
        // 核心配置:禁用JavaScript解析,跳过语法报错
        webClient.getOptions().setJavaScriptEnabled(false);
        // 可选配置:禁用CSS渲染,提升抓取效率
        webClient.getOptions().setCssEnabled(false);
        // 可选配置:忽略SSL证书校验,避免部分站点证书异常报错
        webClient.getOptions().setUseInsecureSSL(true);
        final HtmlPage page = webClient.getPage("https://www.tripadvisor.com");
        System.out.println(page.getTitleText());
    }
    catch (Exception e){
        System.out.println("ERROR " + e);
    }
}
  • 方案二:保留JS执行,屏蔽JS报错(需要动态加载内容时使用)
    如果目标内容需要JS执行后才能渲染出来,可以调整配置跳过JS错误,等待JS执行完成后再读取页面内容:
@Test
public void getPageName() throws Exception {
    try (final WebClient webClient = new WebClient()) {
        // 允许JS执行,但抛出JS错误时不终止程序
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getOptions().setPrintContentOnFailingStatusCode(false);
        // 配置请求超时时间
        webClient.getOptions().setTimeout(30000);
        final HtmlPage page = webClient.getPage("https://www.tripadvisor.com");
        // 等待后台JS执行完成,最长等待10秒
        webClient.waitForBackgroundJavaScript(10000);
        System.out.println(page.getTitleText());
    }
    catch (Exception e){
        System.out.println("ERROR " + e);
    }
}

额外注意

TripAdvisor有成熟的反爬机制,请求频率过高会触发验证码、IP封禁,建议后续正式抓取时配置真实浏览器的User-Agent头,添加合理的请求间隔,避免被站点拦截。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:45:06