2012-07-05 37 views
5

HtmlUnit là một thư viện Java tuyệt vời cho phép bạn điền và gửi biểu mẫu web một cách có lập trình. Tôi hiện đang duy trì một hệ thống khá cũ được viết bằng ASP và thay vì tự điền biểu mẫu web này hàng tháng theo yêu cầu, tôi đang cố tìm cách tự động hóa toàn bộ tác vụ vì tôi giữ quên nó đi. Đó là một biểu mẫu để truy xuất dữ liệu được thu thập trong vòng một tháng. Dưới đây là những gì tôi đã được mã hóa cho đến nay:Trong Java và HtmlUnit, làm cách nào để đợi trang kết quả tải xuống và tải xuống dưới dạng 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(); 

Sau click(), tôi phải chờ đợi rất giống trang web để kết thúc tải lại vì đâu đó có một bảng hiển thị kết quả tìm kiếm của tôi. Sau đó, khi trang được tải xong, tôi cần tải xuống dưới dạng tệp HTML (rất giống như "Lưu trang dưới dạng ..." trong trình duyệt yêu thích của bạn) vì tôi sẽ xóa dữ liệu để tính tổng số của chúng và tôi ' đã thực hiện điều đó bằng cách sử dụng thư viện Jsoup.

Câu hỏi của tôi là: 1. Làm cách nào để tôi có thể lập trình để trang web tải xong trong HtmlUnit? 2. Làm cách nào để tải xuống một cách có lập trình trang web kết quả dưới dạng tệp HTML?

Tôi đã xem xét các tài liệu HtmlUnit rồi và không thể tìm thấy lớp học sẽ làm những gì tôi cần.

Trả lời

0

Làm thế nào để programatically tải trang web kết quả dưới dạng tệp HTML

Hãy thử asXml(). Một cái gì đó như:

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()' không hoạt động! Bạn có biết gì về việc chờ trang tải lại không? Tôi đã cố gắng để làm cho thread ngủ trong 30 giây sau khi tôi gọi 'click()' và đã viết thành công kết quả của 'asXml()' trong một tệp HTML, nhưng trong khi các phần tử '