为我提供了一个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并可以提出一个可行的解决方案,这将非常有帮助。
答案 0 :(得分:0)
waitForBackgroundJavaScriptXX方法不是选项;您必须在getPage(URL)或其他任何类似click()的交互之后调用它们。
HtmlUnit和Selenium之间的主要区别之一是所有部分的集成。在HtmlUnit中,javascript引擎是实现的一部分或一部分,这意味着api能够获取有关当前状态的信息。结果,如果有一些JavaScript待处理,则waitForBackgroundJavaScriptXX方法仅在等待。如果没有,那就没有行动。