【问题标题】:HTMLUnit : super slow execution?HTMLUnit:执行速度超级慢?
【发布时间】:2012-05-13 15:25:03
【问题描述】:

我一直在使用 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 的执行时间?有什么方法可以禁用网页验证。

提前致谢!

【问题讨论】:

  • 请找到更新后的代码。
  • 禁用 JS 支持会让它变得更快
  • 尝试只访问一个链接,看看是否需要时间
  • 不能禁用 JavaScript!
  • 在我的电脑上需要 25 秒。你是不是内存不足?

标签: java selenium htmlunit


【解决方案1】:

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

【讨论】:

  • 禁用 JS 总是会导致更快的执行。但是,OP提到Disabling JavaScript is not an option! :)
  • OP 代表什么?你的意思是JS不应该被禁用?
  • 我的意思是,提问者在评论中添加了禁用 JS 不是一个选项的问题
  • 哦,我错过了。我打算改进 maxmax 的答案,而对原始问题的关注太少。感谢您指出。
【解决方案2】:
  • 请务必使用最新的 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);

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      相关资源
      最近更新 更多