2011-06-27 16 views
6

Estoy usando HtmlUnit para generar el HTML para varias páginas, pero ahora mismo, lo mejor que puedo hacer para convertir la página en el HTML sin formato que devuelve el servidor es convertir HtmlPage en una cadena XML.HtmlUnit - ¿Convierte una HtmlPage en una cadena HTML?

Esto es un poco molesto porque la salida XML es representada por los navegadores web de manera diferente que el HTML sin procesar. ¿Hay alguna manera de convertir una HtmlPage en HTML sin formato en lugar de XML?

Gracias!

Respuesta

5

No estoy 100% seguro de que entendí bien la pregunta, pero tal vez esto va a abordar el problema:.

page.getWebResponse() getContentAsString()

+0

getWebResponse() devuelve la página original, sin las modificaciones realizadas por los scripts. Entonces, como Xml() y asText() es una mejor solución para obtener la página final. – snorbi

7

page.asXml() devolverá el HTML. page.asText() lo devuelve renderizado solo como texto.

+0

Solo quiero confirmar que esto solo devuelve texto dentro de los nodos de texto y no incluye las etiquetas y sus atributos. –

0

No conozco la respuesta, salvo un cambio en el tipo de página y para XmlPage y SgmlPage uno debe hacer un innerHTML en el elemento HTML y escribir manualmente los atributos. No es elegante y exacto (le falta el tipo de documento) pero funciona.

Page.getWebResponse(). GetContentAsString()

Esto es incorrecto, ya que devuelve la forma de texto de la unrendered original, no js bytes. Si javascript se ejecuta y cambia cosas, entonces este método no verá los cambios.

page.asXml() devolverá el HTML. page.asText() lo devuelve renderizado solo para texto.

Solo quiero confirmar que esto solo devuelve texto dentro de los nodos de texto y no incluye las etiquetas y sus atributos. Si desea tomar el HTML completo, este no es el buen enuff.

0

Tal vez usted quiera ir con algo como esto, en lugar de utilizar los métodos del marco 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

creo que no hay manera directa para obtener la última página como HTML. asXml() devuelve el resultado como XML, asText() devuelve el contenido de texto extraído.

Lo mejor que puede hacer es utilizar asXml() y "transformar" a HTML:

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

(Por supuesto, se puede aplicar más transformaciones como la conversión de < br/> a <br> - se depende de sus necesidades)

Incluso el related Google documentation recomienda este enfoque (a pesar de que no se aplican las transformaciones):.

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