加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – HTMLUnit:超慢执行?

发布时间:2020-12-14 05:24:18 所属栏目:Java 来源:网络整理
导读:我一直在使用 HTMLUnit.适合我的要求但似乎是非常慢的. 例如:我已经使用HTMLUnit自动化了以下场景 Goto Google pageEnter some textClick on the search buttonGet the title of the results pageClick on the first result. 代码: long t1=System.current
我一直在使用 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倍(注意这可能是依赖于网页)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读