12
votes

HTMLUNIT: Exécution super lente?

J'ai utilisé htmlunit. Cela convient bien mes besoins. Mais il semble être extrêmement lent. Par exemple: j'ai automatisé le scénario suivant à l'aide de HTMLUnit

long t1=System.currentTimeMillis();
Logger logger=Logger.getLogger("");
logger.setLevel(Level.OFF);
WebClient webClient=createWebClient();
WebRequest webReq=new WebRequest(new URL("http://google.lk"));

HtmlPage googleMainPage=webClient.getPage(webReq);
HtmlTextInput searchTextField=(HtmlTextInput) googleMainPage.getByXPath("//input[@name='q']").get(0);
HtmlButton searchButton=(HtmlButton) googleMainPage.getByXPath("//button[@name='btnK']").get(0);

searchTextField.type("Sri Lanka");
System.out.println("Text typed!");
HtmlPage googleResultsPage= searchButton.click();
System.out.println("Search button clicked!");

System.out.println("Title : " + googleResultsPage.getTitleText());

HtmlAnchor firstResultLink=(HtmlAnchor) googleResultsPage.getByXPath("//a[@class='l']").get(0);
HtmlPage firstResultPage=firstResultLink.click();
System.out.println("First result clicked!");

System.out.println("Title : " + firstResultPage.getTitleText());
//System.out.println(firstResultPage.asText());
long t2=System.currentTimeMillis();
long diff=t2-t1;
System.out.println("Time elapsed : "  + milliSecondsToHrsMinutesAndSeconds(diff));

webClient.closeAllWindows();


5 commentaires

Veuillez trouver le code mis à jour.


La désactivation du support JS le fera waaaaayy plus rapidement


Essayez d'accéder à un seul lien et de voir s'il faut du temps


Désactiver JavaScript n'est pas une option!


Prend 25 ans sur mon ordinateur. Êtes-vous une mémoire de mémoire?


3 Réponses :


9
votes
  • Assurez-vous d'utiliser la dernière version HTMLunit (2.9). J'ai eu une performance boost de la version précédente. Li>

    Je reçois votre exemple fait dans des 20 ans, ou 40S en fonction des options que j'ai définies. Comme je ne peux pas voir l'initialisation de la webclient, je suppose que cela pourrait peut-être être le problème. P>

    Voici mon initialisation pour un traitement 20S: P>

    WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
        client.setTimeout(60000);
        client.setRedirectEnabled(true);
        client.setJavaScriptEnabled(true);
        client.setThrowExceptionOnFailingStatusCode(false);
        client.setThrowExceptionOnScriptError(false);
        client.setCssEnabled(false);
        client.setUseInsecureSSL(true);
    

0 commentaires

1
votes

Je recommande également de définir une limite de temps au JavaScript:

   client.setJavaScriptTimeout(30000); //e.g. 30s


0 commentaires

14
votes

Pour le courant HTMlunit 2.13 actuel, les options de réglage sont légèrement différentes de ce que Maxmax a fourni: xxx

dans mon propre test, ceci est 8 fois plus rapide que les options par défaut. (Notez que cela pourrait être dépendant de la page Web)


4 commentaires

La désactivation de JS entraînera toujours une exécution plus rapide. Cependant, l'OP mentionné désactivé JavaScript n'est pas une option! :)


Qu'est-ce que SOP signifie? Voulez-vous dire que JS ne devrait pas être handicapé?


Je veux dire, l'astucieux a ajouté dans un commentaire à la question qui désactive JS n'est pas une option


Oh, je l'ai manqué. J'avais l'intention d'améliorer la réponse de Maxmax et d'avoir accordé trop peu d'attention à la question initiale. Merci de le pointer.