2011-06-27 29 views
6

Tôi đang sử dụng HtmlUnit để tạo HTML cho các trang khác nhau, nhưng ngay bây giờ, tốt nhất tôi có thể làm để đưa trang đó vào HTML thô mà máy chủ trả về là chuyển HtmlPage thành chuỗi XML.HtmlUnit - Chuyển đổi một HtmlPage thành chuỗi HTML?

Điều này hơi khó chịu vì đầu ra XML được hiển thị bởi trình duyệt web khác với HTML thô. Có cách nào để chuyển đổi một HtmlPage thành HTML thô thay vì XML?

Cảm ơn!

Trả lời

5

Tôi không chắc chắn 100% tôi hiểu câu hỏi một cách chính xác, nhưng có lẽ điều này sẽ giải quyết vấn đề của bạn:.

page.getWebResponse() getContentAsString()

+0

getWebResponse() trả về trang gốc mà không có các sửa đổi được thực hiện bởi tập lệnh. Vì vậy, asXml() và asText() là một giải pháp tốt hơn để có được trang cuối cùng. – snorbi

7

page.asXml() sẽ trở lại với HTML. page.asText() trả về kết quả chỉ hiển thị văn bản.

+0

Chỉ muốn xác nhận điều này chỉ trả về văn bản trong các nút văn bản và không bao gồm các thẻ và thuộc tính của chúng. –

0

Tôi không biết câu trả lời ngắn của một chuyển đổi trên loại Trang và cho XmlPage và SgmlPage phải thực hiện một innerHTML trên phần tử HTML và viết thủ công các thuộc tính. Không thanh lịch và chính xác (thiếu tài liệu) nhưng nó hoạt động.

Page.getWebResponse(). GetContentAsString()

này là không chính xác vì nó trả về hình thức văn bản của unrendered gốc, không js byte. Nếu javascript thực hiện và thay đổi nội dung thì phương thức này sẽ không thấy thay đổi.

page.asXml() sẽ trả về HTML. page.asText() trả về nó được hiển thị thành văn bản.

Chỉ muốn xác nhận điều này chỉ trả về văn bản trong các nút văn bản và không bao gồm các thẻ và thuộc tính của chúng. Nếu bạn muốn lấy HTML hoàn chỉnh thì đây không phải là một dấu hiệu tốt.

0

Có lẽ bạn muốn đi với một cái gì đó như thế này, thay vì sử dụng các phương pháp khuôn khổ HtmlUnit của:

try (InputStreamReader isr = new InputStreamReader(url.openConnection().getInputStream()); 
       BufferedReader br = new BufferedReader(isr);){ 

     String line =""; 
     String htmlSource =""; 

     while((line = br.readLine()) != null) 
     { 
      htmlSource += line + "\n"; 
     } 


     return htmlSource; 

     } catch (IOException e) { 
     // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
1

Tôi nghĩ rằng không có cách nào trực tiếp để có được những trang cuối cùng dưới dạng HTML. asXml() trả về kết quả dưới dạng XML, asText() trả về nội dung văn bản được trích xuất.

Điều tốt nhất bạn có thể làm là sử dụng asXml() và "cải tạo" nó sang HTML:

htmlPage.asXml().replaceFirst("<\\?xml version=\"1.0\" encoding=\"(.+)\"\\?>", "<!DOCTYPE html>") 

(Tất nhiên bạn có thể áp dụng nhiều biến đổi như chuyển đổi < br/>-<BR> - nó phụ thuộc vào yêu cầu của bạn)

Ngay cả những related Google documentation khuyến cáo phương pháp này (mặc dù họ không áp dụng bất kỳ biến đổi):.

// return the snapshot 
out.println(page.asXml()); 
Các vấn đề liên quan