Javascript 使用 htmlUnit 的基于动态内容
Javascript based dynamic content using htmlUnit
我一直坚持使用 HtmlUnit 获取基于 JavaScript 的动态内容。我期待从页面获得(登录,注册 html 内容)。使用以下代码,我只获取静态内容。
我是 HtmlUnit 的新手。任何帮助将不胜感激。
String strURL = "https://www.checkmytrip.com" ;
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_31);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.waitForBackgroundJavaScript(60 * 1000);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage myPage = ((HtmlPage) webClient.getPage(strURL));
String theContent = myPage.getWebResponse().getContentAsString();
System.out.println(theContent);
两点:
- 获取页面后需要waitForBackgroundJavaScript(),如提示here
您应该使用 myPage.asText() 或 .asXml() 代替,因为 getWebResponse() returns 没有 JavaScript 执行的原始内容。
String strURL = "https://www.checkmytrip.com" ;
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);
try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_31)) {
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage myPage = ((HtmlPage) webClient.getPage(strURL));
webClient.waitForBackgroundJavaScript(10 * 1000);
String theContent = myPage.asXml();
System.out.println(theContent);
}
我一直坚持使用 HtmlUnit 获取基于 JavaScript 的动态内容。我期待从页面获得(登录,注册 html 内容)。使用以下代码,我只获取静态内容。
我是 HtmlUnit 的新手。任何帮助将不胜感激。
String strURL = "https://www.checkmytrip.com" ;
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_31);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.waitForBackgroundJavaScript(60 * 1000);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
HtmlPage myPage = ((HtmlPage) webClient.getPage(strURL));
String theContent = myPage.getWebResponse().getContentAsString();
System.out.println(theContent);
两点:
- 获取页面后需要waitForBackgroundJavaScript(),如提示here
您应该使用 myPage.asText() 或 .asXml() 代替,因为 getWebResponse() returns 没有 JavaScript 执行的原始内容。
String strURL = "https://www.checkmytrip.com" ; java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF); java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF); try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_31)) { webClient.setAjaxController(new NicelyResynchronizingAjaxController()); HtmlPage myPage = ((HtmlPage) webClient.getPage(strURL)); webClient.waitForBackgroundJavaScript(10 * 1000); String theContent = myPage.asXml(); System.out.println(theContent); }