如何限制HtmlUnit的历史记录大小?

时间:2010-05-17 13:33:58

标签: java history htmlunit

我正在使用HtmlUnit进行解析工作,并且我发现内存被WebClient浪费在每个WebWindow的历史记录中。我根本不使用历史记录,我想禁用它的管理或者至少用1或2来限制它的大小。这可能吗?

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

这允许窗口从中断的地方继续。 它很丑,但如果你绝望,它可能会奏效。