我正在使用HtmlUnit进行解析工作,并且我发现内存被WebClient浪费在每个WebWindow的历史记录中。我根本不使用历史记录,我想禁用它的管理或者至少用1或2来限制它的大小。这可能吗?
答案 0 :(得分:2)
以下代码将ignoreNewPages_
设置为true:
try {
final WebClient webClient = getWebClient();
final List<WebWindow> webWindows = webClient.getWebWindows();
History window = webWindows.get(0).getHistory();
Field f = window.getClass().getDeclaredField("ignoreNewPages_"); //NoSuchFieldException
f.setAccessible(true);
((ThreadLocal<Boolean>) f.get(window)).set(true);
} catch (Exception e) {
e.printStackTrace();
throw new AssertionError("Can't disable history");
}
访问者:
private static WebTester getTester() {
return JWebUnit.getTester();
}
private HtmlUnitTestingEngineImpl getHtmlUnitEngine() {
return (HtmlUnitTestingEngineImpl) getTester().getTestingEngine();
}
private WebClient getWebClient() {
return getHtmlUnitEngine().getWebClient();
}
答案 1 :(得分:-1)
HtmlUnit中没有选项可以禁用我所知道的历史记录。 History类有一个getHistory()方法但没有setHistory()或disableHistory()。我所做的,当然不是理想的,是发布网页并重新实现它。只要你不释放你的CookieManager,你就可以在cookie前面做好。基本上,一旦我完成并登录,我将当前页面存储到临时字符串后使窗口无效,然后我将其重新实例化到我离开的位置。我在给定的点上这样做以清除历史。
String tempPage = currentHtmlPage.getUrl().toString(); //HtmlPage class
window = null;
window = new WebWindow();
currentHtmlPage = new WebWindow.getWebClient().getPage(tempPage); //HtmlPage class
这允许窗口从中断的地方继续。 它很丑,但如果你绝望,它可能会奏效。