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();
3 Réponses :
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);
Je recommande également de définir une limite de temps au JavaScript:
client.setJavaScriptTimeout(30000); //e.g. 30s
Pour le courant HTMlunit 2.13 actuel, les options de réglage sont légèrement différentes de ce que Maxmax a fourni: 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) p> p>
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! Code> :)
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.
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?