当前位置: 首页 > 面试题库 >

HTMLUnit:执行速度超级慢?

罗睿识
2023-03-14
问题内容

我一直在使用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倍。(请注意,这可能取决于网页)



 类似资料:
  • 我在程序(计时器类)中使用scheduleAtFixedRate方法。它每秒钟运行一次,但有时这种方法会变得非常快(每秒执行3-4次)。 然而,我在网上做了一些研究,发现了这个: 复制自android开发者页面: 对于固定速率执行,任务每次连续运行的开始时间都是计划的,而不考虑上一次运行的时间。如果延迟阻止计时器按时启动任务,则这可能会导致一系列串接运行(一个接一个地启动)。 我需要固定的计时器。

  • 我正在尝试测试Aparapi的性能。我看到过一些博客,其中的结果显示,Aparapi确实在做数据并行操作的同时提高了性能。 但我在测试中没有看到这一点。这里是我所做的,我写了两个程序,一个使用Aparapi,另一个使用普通循环。 方案1:在Aparapi 程序2:使用循环 程序1需要大约330ms,而程序2只需要大约55ms。我是不是做错什么了?我在Aparpai程序中打印出了执行模式,它打印出的

  • 问题内容: 我正在尝试在以下URL上执行JavaScript :。我可以使用谷歌浏览器通过按ctrl + shift + j并粘贴以下脚本来打开控制台: 它返回:150然后在下一行中,我写: 并且它返回长度为150的数组。 当我尝试这样做时: 我收到以下异常: 导致异常的行是: 那么,我应该如何从HtmlUnit执行此脚本,就像在Google Chrome控制台中一样? 问题答案: 这些是您的框架

  • 我正在使用HtmlUnit登录网站。尽管设置了连接超时和Javascript超时,但脚本在尝试登录站点时仍然挂起。本网站是一个内部网页,不对Web开放。 下面是我正在使用的webClient配置: 注意:我使用的是IBM JDK1.7和HTMLUnit2.12(最新版本)。我已经在我的项目的buildpath中包含了所有21个依赖项JAR。它不使用任何日志记录机制。它使用println语句打印出控

  • 问题内容: 我已经开发了一个用户批量上传模块。有两种情况,当数据库有零条记录时,我批量上传了20000条记录。大约需要5个小时。但是,当数据库已经有大约30 000条记录时,上传速度将非常缓慢。上载2万条记录大约需要11个小时。我只是通过fgetcsv方法读取CSV文件。 下面是运行的查询。(我正在使用Yii框架) 如果存在,请更新用户: 如果用户不存在,请插入新记录。 表引擎类型为MYISAM。

  • 问题内容: 为了找到两个数据库之间的所有更改,我将pk上的表联接在一起,并使用date_modified字段选择最新记录。由于表具有相同的架构,因此将使用提高的性能。我想用重写它,但是我不确定在每种情况下for的实现是否都可以执行。希望有人对何时使用有更多的技术说明。 问题答案: 任何人都无法告诉您,它永远或永远不会超过同等产品。无论您如何编写意图,优化器都会选择合适的执行计划。 就是说,这是我的