2012-07-05 9 views
5

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.

Antwort

0

Wie lade ich programmatisch die resultierende Webseite als HTML-Datei

asXml() Versuchen. Etwas wie:

page = submit.click(); 
String htmlContent = page.asXml(); 
File htmlFile = new File("C:/index.html"); 
PrintWriter pw = new PrintWriter(htmlFile, true); 
pw.print(htmlContent); 
pw.close(); 
+0

'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 '