Hallo,
ich benutze das HTMLUnit-Framework um einen Webcrawler zu entwickeln. Hierbei stoß ich jedoch auf ein Problem, bei der Verarbeitung von Javascript. Wenn ich sehr viele JS-Aufrufe verarbeite (so bei 100) bekomme ein Heap-Space Problem! Meine Anwendung läuft mit 128 MB. Wenn ich Seiten verarbeite bei dem kein JS verarbeitet wird, bekomm ich kein Problem.
Ich habe das Problem schon gegooglet jedoch nichts brauchbares gefunden. Bei jedem Laden einer Webseite mir ein neues WebClient-Objekt zu erstellen wäre zwar möglich, jedoch würde ich dabei schon bestehnde Cookies und somit schon bestätigte Disclaimer von Webseiten verlieren!
Ich konnte das Problem soweit einschränken das ich weiß das mein WebClient-Objekt irgendwie mit der Zeit zuviel Daten über die Javascriptaufrufe ansammelt, jedoch hab ich noch keinen Weg gefunden diese zu löschen!
Wollt deswegen mal nachfragen, ob sich jemand mit dem Framework auskennt und mir einen Tipp geben kann!
Verarbeitung von JavaScript:
Laden einer Webseite:
ich benutze das HTMLUnit-Framework um einen Webcrawler zu entwickeln. Hierbei stoß ich jedoch auf ein Problem, bei der Verarbeitung von Javascript. Wenn ich sehr viele JS-Aufrufe verarbeite (so bei 100) bekomme ein Heap-Space Problem! Meine Anwendung läuft mit 128 MB. Wenn ich Seiten verarbeite bei dem kein JS verarbeitet wird, bekomm ich kein Problem.
Ich habe das Problem schon gegooglet jedoch nichts brauchbares gefunden. Bei jedem Laden einer Webseite mir ein neues WebClient-Objekt zu erstellen wäre zwar möglich, jedoch würde ich dabei schon bestehnde Cookies und somit schon bestätigte Disclaimer von Webseiten verlieren!
Ich konnte das Problem soweit einschränken das ich weiß das mein WebClient-Objekt irgendwie mit der Zeit zuviel Daten über die Javascriptaufrufe ansammelt, jedoch hab ich noch keinen Weg gefunden diese zu löschen!
Wollt deswegen mal nachfragen, ob sich jemand mit dem Framework auskennt und mir einen Tipp geben kann!
Verarbeitung von JavaScript:
Code:
ScriptResult result = page.executeJavaScript(javascript);
page.getEnclosingWindow().getThreadManager().joinAll(10000);
HtmlPage executedPage = (HtmlPage) result.getNewPage();
Laden einer Webseite:
Code:
try {
HtmlPage page = (HtmlPage) client.getPage(url);
cache.addUrl(url);
return page;
} catch (Exception e) {
throw new NullPageException("Fehler beim Laden der Seite: " +url);
}