HtmlUnit WebClient.getPage不处理javascript

时间:2018-12-20 15:32:48

标签: javascript java htmlunit

我尝试使用HtmlUnit WebClient.getPage加载带有javascript的页面。但是加载的页面不会处理其中的javascript代码。

我试图根据我能找到的所有相关答案在WebClient中添加所有选项。仍然不起作用。

    WebClient webClient = new WebClient(BrowserVersion.CHROME);
    webClient.getOptions().setJavaScriptEnabled(true);
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.getOptions().setUseInsecureSSL(true);
    String testUrl = "https://www.coursera.org/browse/data-science";
    try {
        final HtmlPage page = webClient.getPage(testUrl);
        webClient.waitForBackgroundJavaScript(20 * 1000);
        System.out.println(page.asXml());
    }catch(Exception e) {
        e.printStackTrace();
    }
    webClient.close();

在页面“ https://www.coursera.org/browse/data-science”上,我希望将page.asXml()中列出的所有课程视为html元素。但是它仅将“趋势课程”部分中的课程显示为html元素。

1 个答案:

答案 0 :(得分:1)

从第一眼看,我认为这是因为javascript失败(var t的重复声明)。您可以在日志中看到错误。在真正的浏览器中,这不会失败,并且可能会停止所需的js处理,因此,只会创建页面的一部分。

已经稍微分析了一下错误,并且我能够在一个简单的场景中重现此错误(如果涉及到这种巨大的js库,这通常是最难的一步)。将尝试在Rhino中解决此问题,但这需要一些时间。

请在https://github.com/HtmlUnit处打开一个测试用例的问题。然后,我将负责增加问题并建立PR。如果您愿意,可以添加此问题的链接,那么我也将对此进行更新。要了解有关HtmlUnit更新的信息,可以使用https://twitter.com/HtmlUnit