解析ジョブに HtmlUnit を使用していますが、各 WebWindow の履歴を保持する WebClient でメモリが浪費されることがわかりました。履歴をまったく使用しないので、その管理を無効にするか、少なくともサイズを 1 または 2 に制限したいのですが、それは可能ですか?
2 に答える
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();
}
于 2011-06-30T09:58:58.243 に答える
-1
HtmlUnit には、私が認識している履歴を無効にするオプションはありません。History クラスには getHistory() メソッドがありますが、setHistory() または disableHistory() はありません。私が行ったことは、確かに理想的ではありませんが、Web ページを解放して再インスタンス化することです。CookieManager を解放しない限り、Cookie に関しては問題ありません。基本的に、最後までログインしてログインしたら、現在のページを一時文字列に保存した後、ウィンドウを無効にし、中断した場所に戻します。履歴を消去するために、特定の時点でこれを行います。
String tempPage = currentHtmlPage.getUrl().toString(); //HtmlPage class
window = null;
window = new WebWindow();
currentHtmlPage = new WebWindow.getWebClient().getPage(tempPage); //HtmlPage class
これにより、ウィンドウは中断したところから再開できます。醜いですが、必死ならうまくいくかもしれません。
于 2011-06-29T18:15:18.257 に答える