我希望从一组格式相似的网页中收集信息。我需要在打开后通过Javascript加载到页面上的一些信息。似乎HTMLUnit是一个非常常用的工具,所以我正在使用它。不幸的是,这很慢,这是我在许多论坛上看到的抱怨。 webClient.getPage()命令是永远的。当我关闭Javascript时,它运行得很快,但我需要执行一些Javascript命令。我想知道,有没有办法有选择地执行一些Javascript命令而不是所有命令?
或者,是否有一个比HTMLUnit快得多的程序来处理Javascript?
答案 0 :(得分:3)
排序。您可以以编程方式决定要加载哪些外部JavaScript URL:
如果启用了JavaScript,HtmlUnit将运行页面上嵌入的所有JS。但是,如果不需要某些外部URL,您可以选择不加载它们。
这里有一些代码可以让你开始:
webClient.setWebConnection(new FalsifyingWebConnection(webClient) {
@Override
public WebResponse getResponse(WebRequest request) throws IOException {
if(request.getUrl().getPath().toLowerCase().equals("some url i don't need ")) {
return createWebResponse(request, "", "application/javascript");
}
return super.getResponse(request);
}
});
设置以下内容可能会加快速度:
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
webClient.setCssErrorHandler(new SilentCssErrorHandler());
webClient.setIncorrectnessListener(new IncorrectnessListener() {
@Override
public void notify(String s, Object o) { }
});
webClient.getCookieManager().setCookiesEnabled(false);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setPrintContentOnFailingStatusCode(false);