【问题标题】:Javascript based dynamic content using htmlUnit使用 htmlUnit 的基于 Javascript 的动态内容
【发布时间】:2015-08-01 06:04:12
【问题描述】:

我一直坚持使用 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);      

【问题讨论】:

    标签: java javascript htmlunit


    【解决方案1】:

    两点:

    1. 获取页面后需要waitForBackgroundJavaScript(),提示here
    2. 您应该改用 myPage.asText() 或 .asXml(),因为 getWebResponse() 返回原始内容而不执行 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);
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多