2012-07-05 18 views
5

HtmlUnit是一個非常棒的Java庫,它允許您以編程方式填寫並提交Web表單。我目前正在維護一個用ASP編寫的漂亮的舊系統,而不是按照我的要求每月手工填寫這一個Web表單,我試圖找到一種方法來實現整個任務的自動化,因爲我保留忘了它。這是一種檢索一個月內收集的數據的表單。下面是我到目前爲止編碼:在Java和HtmlUnit中,如何等待生成的頁面完成加載並將其下載爲HTML?

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(); 

click()後,我應該等待同樣的網頁來完成重裝,因爲某處有一個顯示我的搜索結果的表。然後,當頁面加載完成後,我需要將它作爲一個HTML文件下載(非常像「Save Page As ...」保存在您最喜歡的瀏覽器中),因爲我將刪除數據來計算它們的總數,我已經使用Jsoup庫完成了這項工作。我的問題是: 1.如何以編程方式等待網頁在HtmlUnit中完成加載? 2.如何以編程方式將生成的網頁作爲HTML文件下載?

我已經研究過HtmlUnit文檔,並且找不到一個能夠做我需要的類。

回答

0

如何編程下載所產生的網頁爲HTML文件

嘗試asXml()。喜歡的東西:

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()'does not work!你知道等待頁面重新加載嗎?我嘗試讓線程在調用'click()'後睡30秒,併成功將'asXml()'的結果寫入HTML文件,但在正確修改'