通过Java客户端使用渲染的页面链接

时间:2019-03-26 08:09:40

标签: java htmlunit

为我提供了一个URL,我需要获取此url html,然后从那里获取此站点链接。 我考虑过使用无头浏览器。我正在使用Java,所以我想使用Java流程来总结一下。
一个例子可以是CNN网站... 到目前为止,我尝试使用:

  

testCompile'net.sourceforge.htmlunit:htmlunit:2.32'

   @Test
     public void htmlUnitTest() throws Exception {

      try (final WebClient webClient = new WebClient(BrowserVersion.CHROME)) {

        webClient.waitForBackgroundJavaScriptStartingBefore(20000);
        webClient.getOptions().setThrowExceptionOnScriptError(false);

        final HtmlPage page = webClient.getPage(URL);
        WebResponse response = page.getWebResponse();
        String content = response.getContentAsString();

        List<HtmlAnchor> anchors = page.getAnchors();

        System.out.println("anchors.size() : " + anchors.size());
        System.out.println("***********");
        System.out.println(content);
        System.out.println("***********");

        try (BufferedWriter writer = new BufferedWriter(new FileWriter("htmlUnit.txt"))) {
            writer.write(content);
        }
    }
}

但是响应是我得到的原始HTML没有呈现(Java脚本在我的情况下还没有工作并创建了页面锚点)

有人可以推荐另一个库,或者告诉我是否想念使用html unit并可以提出一个可行的解决方案,这将非常有帮助。

1 个答案:

答案 0 :(得分:0)

waitForBackgroundJavaScriptXX方法不是选项;您必须在getPage(URL)或其他任何类似click()的交互之后调用它们。

HtmlUnit和Selenium之间的主要区别之一是所有部分的集成。在HtmlUnit中,javascript引擎是实现的一部分或一部分,这意味着api能够获取有关当前状态的信息。结果,如果有一些JavaScript待处理,则waitForBackgroundJavaScriptXX方法仅在等待。如果没有,那就没有行动。