繁体   English   中英

HTMLUnit:执行速度超慢?

[英]HTMLUnit : super slow execution?

我一直在使用HTMLUnit。 它很适合我的要求。 但它似乎非常缓慢。 例如:我使用HTMLUnit自动化了以下场景

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的执行时间? 有没有办法禁用网页上的验证。

提前致谢!

对于当前的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倍。(请注意,这可能与网页有关)

  • 一定要使用最新的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);

我还建议设置javascript的时间限制:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM