/ / Contenu dynamique basé sur Javascript utilisant htmlUnit - java, javascript, htmlunit

Contenu dynamique basé sur Javascript avec htmlUnit - java, javascript, htmlunit

J'ai été bloqué pour obtenir JavaScript basécontenu dynamique utilisant HtmlUnit. Je m'attends à obtenir (connexion, contenu HTML d'inscription) de la page. Avec le code suivant, je ne récupère que le contenu statique.

Je suis nouveau sur HtmlUnit. Toute aide sera grandement appréciée.

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);

Réponses:

4 pour la réponse № 1

Deux points:

  1. Vous devez attendreForBackgroundJavaScript () après avoir obtenu la page, comme indiqué ici
  2. Vous devez plutôt utiliser myPage.asText () ou .asXml (), car getWebResponse () renvoie le contenu d'origine sans exécution de 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);
    }