HtmlUnit ist eine großartige Java-Bibliothek, mit der Sie Webformulare programmatisch ausfüllen und absenden können. Ich führe derzeit ein ziemlich altes System, das in ASP geschrieben ist, und anstatt dieses Formular monatlich manuell auszufüllen, wie ich es benötige, versuche ich einen Weg zu finden, vielleicht die gesamte Aufgabe zu automatisieren, weil ich es behalte vergess es. Es ist ein Formular zum Abrufen von Daten innerhalb eines Monats gesammelt. Hier ist, was ich bisher codiert:Wie können Sie in Java und HtmlUnit darauf warten, dass eine resultierende Seite vollständig geladen und als HTML heruntergeladen wird?
WebClient client = new WebClient();
HtmlPage page = client.getPage("http://urlOfTheWebsite.com/search.aspx");
HtmlForm form = page.getFormByName("aspnetForm");
HtmlSelect frMonth = form.getSelectByName("ctl00$cphContent$ddlStartMonth");
HtmlSelect frDay = form.getSelectByName("ctl00$cphContent$ddlStartDay");
HtmlSelect frYear = form.getSelectByName("ctl00$cphContent$ddlStartYear");
HtmlSelect toMonth = form.getSelectByName("ctl00$cphContent$ddlEndMonth");
HtmlSelect toDay = form.getSelectByName("ctl00$cphContent$ddlEndDay");
HtmlSelect toYear = form.getSelectByName("ctl00$cphContent$ddlEndYear");
HtmlCheckBoxInput games = form.getInputByName("ctl00$cphContent$chkListLottoGame$0");
HtmlSubmitInput submit = form.getInputByName("ctl00$cphContent$btnSearch");
frMonth.setSelectedAttribute("1", true);
frDay.setSelectedAttribute("1", true);
frYear.setSelectedAttribute("2012", true);
toMonth.setSelectedAttribute("1", true);
toDay.setSelectedAttribute("31", true);
toYear.setSelectedAttribute("2012", true);
games.setChecked(true);
submit.click();
Nach den click()
, ich sollte für die gleiche Web-Seite warten Nachladen zu beenden, weil es irgendwo eine Tabelle, die die Ergebnisse meiner Suche anzeigt. Dann, wenn die Seite fertig geladen ist, muss ich sie als HTML-Datei herunterladen (sehr ähnlich wie "Seite speichern unter ..." in Ihrem bevorzugten Browser), weil ich die Daten auskratzen werde, um ihre Gesamtsummen zu berechnen, und ich ' Das haben Sie bereits mit der Bibliothek Jsoup gemacht.
Meine Fragen sind: 1. Wie programmiere ich programmatisch, bis die Webseite fertig geladen in HtmlUnit? 2. Wie lade ich die resultierende Webseite programmatisch als HTML-Datei herunter?
Ich habe bereits in die HtmlUnit-Dokumentation gesucht und konnte keine Klasse finden, die das tut, was ich brauche.
'asXml()' funktioniert! Weißt du etwas über das Warten, dass die Seite neu geladen wird? Ich habe versucht, den Thread nach dem Aufruf von 'click()' für 30 Sekunden schlafen zu lassen und schrieb erfolgreich das Ergebnis von 'asXml()' in eine HTML-Datei, aber während die '
@matkiros Es gibt keinen Vorteil, einen Thread in den Ruhezustand zu versetzen, da 'click()' sofort mit neuer Instanz von 'HtmlPage' oder einer Unterklasse zurückgegeben wird, dh Sie müssen folgendes tun:' page = submit.click(); 'or Weisen Sie es einer neuen Referenz zu. –
Sie haben recht, ich habe das 'page = submit.click()' Ding gemacht, und es hat auch so funktioniert, wie ich es wollte. Vielen Dank! –