2012-05-04 2 views
9

Я использую HTMLUnit. Это соответствует моим требованиям. Но это кажется очень медленным. , например: я автоматизировал следующий сценарий, используя HtmlUnitHTMLUnit: супер медленное исполнение?

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

Код:

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

Он работает на 100% хорошо. Но это занимает 3 минуты, 41 секунда

Я предполагаю, что причиной медленного выполнения является проверка каждого элемента на странице.

Вопрос: как уменьшить время выполнения HTMLUnit? есть ли способ отключить проверки на веб-страницах.

Заранее благодарен!

+0

вы можете вставить код? – UVM

+0

Обновленный код. –

+0

Отключение поддержки JS заставит его waaaaayy быстрее –

ответ

6
  • Обязательно используйте последнюю версию htmlunit (2.9). У меня была производительность с предыдущей версии.

Я получаю ваш пример в течение 20 или 40 секунд в зависимости от параметров, которые я задал. Поскольку я не вижу инициализацию webClient, возможно, это может быть проблемой.

Вот моя инициализация для лечения 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

Я рекомендую также установить лимит времени на JavaScript:

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

Для текущего HtmlUnit 2.13, настройка параметров несколько отличается от что maxmax предоставил:

final WebClient webClient = new WebClient(BrowserVersion.CHROME); 
webClient.getOptions().setCssEnabled(false);//if you don't need css 
webClient.getOptions().setJavaScriptEnabled(false);//if you don't need js 
HtmlPage page = webClient.getPage("http://XXX.xxx.xx"); 
... 

В моем собственном тесте это 8 раз чем параметры по умолчанию. (Обратите внимание, что это может быть зависимо от веб-страницы)

+3

Отключение JS всегда приведет к ускоренному выполнению. Однако OP, упомянутый «Отключение JavaScript не является вариантом!» :) –

+0

Что означает OP? Вы имеете в виду, что JS не следует отключать? – fstang

+0

Я имею в виду, что ответчик добавил в комментарии к вопросу, что отключение JS не является опцией –

Смежные вопросы