2011-06-27 25 views
6

Używam HtmlUnit do generowania kodu HTML dla różnych stron, ale w tej chwili najlepsze, co mogę zrobić, aby uzyskać stronę do surowego HTML, który zwraca serwer, to przekonwertować stronę HtmlPage na ciąg znaków XML.HtmlUnit - Konwertowanie strony Html na ciąg HTML?

Jest to nieco denerwujące, ponieważ wynik XML jest renderowany przez przeglądarki internetowe inaczej niż w przypadku surowego kodu HTML. Czy istnieje sposób na przekonwertowanie strony HtmlPage na surowy HTML zamiast XML?

Dzięki!

Odpowiedz

5

nie jestem 100% pewien, że zrozumiał pytanie poprawnie, ale może to będzie dotyczyć problemu.

page.getWebResponse() getContentAsString()

+0

getWebResponse() zwraca oryginalną stronę, bez modyfikacji dokonanych przez skrypty. Tak więc asXml() i asText() jest lepszym rozwiązaniem, aby uzyskać końcową stronę. – snorbi

7

page.asXml() wróci HTML. page.asText() zwraca to renderowanie do samego tekstu.

+0

Chcę tylko potwierdzić, że zwraca tylko tekst w węzłach tekstowych i nie zawiera znaczników oraz ich atrybutów. –

0

Nie znam odpowiedzi krótkiej na typ strony, a dla XmlPage i SgmlPage trzeba zrobić innerHTML na elemencie HTML i ręcznie wypisać atrybuty. Nie jest elegancki i dokładny (brakuje mu doctype), ale działa.

Page.getWebResponse(). GetContentAsString()

To jest błędne, gdyż zwraca formularz tekst oryginalny niewytopiony, nie js bajtów. Jeśli javascript wykonuje i zmienia rzeczy, ta metoda nie zobaczy zmian.

page.asXml() zwróci kod HTML. page.asText() zwraca go do tekstu.

Chcemy tylko potwierdzić, że zwraca tylko tekst w węzłach tekstowych i nie zawiera znaczników oraz ich atrybutów. Jeśli chcesz wziąć kompletny HTML, to nie jest to dobra wersja.

0

Może chcesz iść z czymś takim, a nie przy użyciu metod Ramy HtmlUnit za:

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

myślę nie ma bezpośredni sposób, aby uzyskać ostateczną stronę jako HTML. asXml() zwraca wynik jako XML, asText() zwraca wyodrębnioną treść tekstową.

Najlepsze co możesz zrobić, to użyć asXml() i "przekształcić" go do HTML:

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

(Oczywiście można zastosować kolejne transformacje jak konwersja < br/> do <br> - to zależy od wymagań)

Nawet related Google documentation zaleca to podejście (choć nie stosuje się żadnych przekształceń).

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