2012-05-04 15 views
9

Ho utilizzato HTMLUnit. Si adatta bene alle mie esigenze. Ma sembra essere estremamente lento. per esempio: mi hanno automatizzato il seguente scenario utilizzando HtmlUnitHTMLUnit: esecuzione super slow?

Goto Google page 
Enter some text 
Click on the search button 
Get the title of the results page 
Click on the first result. 

Codice:

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

Funziona bene al 100%. Ma ci vogliono 3 minuti, 41 secondi

Immagino che il motivo per l'esecuzione lenta sia la convalida di ogni singolo elemento della pagina.

La mia domanda è come ridurre i tempi di esecuzione di HTMLUnit? c'è un modo per disabilitare le convalide sulle pagine web.

Grazie in anticipo!

+0

è possibile incollare il codice? – UVM

+0

Si prega di trovare il codice aggiornato. –

+0

Disabilitare il supporto JS renderà più veloce il più possibile –

risposta

6
  • Assicurarsi di utilizzare l'ultima versione htmlunit (2.9). Ho avuto un incremento delle prestazioni rispetto alla versione precedente.

ottengo il vostro esempio fatto entro 20 anni, o 40 anni a seconda opzioni ho impostato. Poiché non riesco a vedere l'inizializzazione di webClient, suppongo che potrebbe essere il problema.

Ecco la mia inizializzazione per un trattamento anni '20:

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

Consiglio anche di impostare un limite di tempo per la javascript:

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

Per la HtmlUnit corrente 2.13, l'impostazione delle opzioni è leggermente diversa da cosa ha fornito Maxmax:

Nel mio test, questo è 8 volte fas ter delle opzioni predefinite. (Si noti che questo potrebbe dipendere dalla pagina Web)

+3

La disattivazione di JS comporta sempre un'esecuzione più rapida. Tuttavia, l'OP ha menzionato 'Disabilitare JavaScript non è un'opzione!' :) –

+0

Cosa significa OP? Vuoi dire che JS non dovrebbe essere disabilitato? – fstang

+0

Voglio dire, il richiedente ha aggiunto in un commento alla domanda che disabilitare JS non è un'opzione –