2011-06-27 203 views
6

我正在使用HtmlUnit爲各種頁面生成HTML,但現在,我可以做的最好的方法是將頁面轉換爲服務器返回的原始HTML,並將HtmlPage轉換爲XML字符串。HtmlUnit - 將HtmlPage轉換爲HTML字符串?

這有點令人討厭,因爲Web瀏覽器呈現的XML輸出與原始HTML不同。有沒有辦法將HtmlPage轉換爲原始HTML而不是XML?

謝謝!

回答

5

我不是100%肯定我理解正確的問題,但也許這將解決您的問題。

page.getWebResponse()getContentAsString()

+0

getWebResponse()返回原始頁面,不需要腳本進行修改。所以asXml()和asText()是獲得最終頁面的更好解決方案。 – snorbi

7

page.asXml()將返回HTML。 page.asText()將其呈現爲僅顯示文本。

+0

只是想確認這隻返回文本節點內的文本,不包括標籤及其屬性。 –

0

我不知道在頁面類型和XmlPage和SgmlPage上切換開關的問題,必須在HTML元素上執行innerHTML並手動寫出屬性。不優雅和確切(它缺少文檔類型),但它的工作原理。

Page.getWebResponse()。getContentAsString()

這是不正確的,它返回原來的未渲染,沒有JS字節文本形式。如果JavaScript執行並更改內容,那麼此方法將不會看到更改。

page.asXml()將返回HTML。 page.asText()將其呈現爲文本。

只想確認這隻返回文本節點內的文本,不包括標籤及其屬性。如果你想採取完整的HTML,這不是一件好事。

0

也許你想去的地方,而不是使用框架的HtmlUnit的方法有這樣的事情,:

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

我覺得有沒有直接的方法以獲得最終頁面的HTML。 asXml()以XML形式返回結果,asText()返回提取的文本內容。

你能做的最好是用asXml()和 「改造」 它HTML:

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

(當然你可以將更多的轉換像轉換< BR/>到<BR> - 它取決於您的要求)

即使related Google documentation建議使用此方法(雖然他們不應用任何轉換):

// return the snapshot 
out.println(page.asXml());