我尝试使用 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 元素列出的所有类(class)。但它仅将“热门类(class)”部分中的类(class)显示为 html 元素。

请您参考如下方法:

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

已经对这个错误进行了一些分析,我能够在一个简单的场景中重现这个问题(如果涉及这种巨大的 js 库,这通常是最困难的一步)。将尝试在 Rhino 中修复此问题,但这需要一些时间。

请通过 https://github.com/HtmlUnit 打开问题与你的测试用例。然后我将负责添加问题并建立 PR。如果您愿意,可以添加此问题的链接,然后我也会更新此问题。要了解任何 HtmlUnit 更新,您可以使用 https://twitter.com/HtmlUnit .


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!