2011-03-02 27 views
9

Traté de código fuente HTML de la siguiente manera:Obtener el código HTML a través del control WebBrowser en C#

webBrowser1.Document.Body.OuterHtml; 

pero no funciona. Por ejemplo, si el código HTML original es:

<html> 
<body> 
    <div> 
     <ul> 
      <li> 
       <h3> 
        Manufacturer</h3> 
      </li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_3808675_100021_10194772_">Sony </a>(44)</li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_108496_100021_10194772_">Nikon </a>(19)</li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_3808726_100021_10194772_">Panasonic </a>(37)</li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_3808769_100021_10194772_">Canon </a>(29)</li> 
      <li><a href="/4566-6501_7-0.html? 

filter=1000036_2913388_100021_10194772_">Olympus </a>(21)</li> 
      <li class="seeAll"><a href="/4566-6501_7-0.html? 

sa=1000036&filter=100021_10194772_" class="readMore">See all manufacturers </a></li> 
     </ul> 
    </div> 
</body> 
</html> 

pero la salida de webBrowser1.Document.Body.OuterHtml es:

<body> 
    <div> 
     <ul> 
      <li> 
       <h3> 
        Manufacturer</h3> 
       <li><a href="/4566-6501_7-0.html?filter=1000036_3808675_100021_10194772_">Sony </a>(44) 
        <li><a href="/4566-6501_7-0.html?filter=1000036_108496_100021_10194772_">Nikon </a>(19) 
         <li><a href="/4566-6501_7-0.html?filter=1000036_3808726_100021_10194772_">Panasonic 
         </a>(37) 
          <li><a href="/4566-6501_7-0.html?filter=1000036_3808769_100021_10194772_">Canon </a> 
           (29) 
           <li><a href="/4566-6501_7-0.html?filter=1000036_2913388_100021_10194772_">Olympus </a> 
            (21) 
            <li class="seeAll"><a class="readMore" href="/4566-6501_7-0.html?sa=1000036&amp;filter=100021_10194772_"> 
             See all manufacturers </a></li> 
     </ul> 
    </div> 
</body> 

como se puede ver, muchos </li> se pierden.

¿hay alguna forma de obtener el código HTML en el control WebBrower correctamente? Tenga en cuenta que en mi aplicación, trato de usar WebBrowser para agregar información de coordenadas a cada nodo y dar salida a su fuente HTML con la información de coordenadas que se agrega como atributos de los nodos.

¿alguien me puede hacer un favor?

Respuesta

8

Pruebe usar DocumentText o DocumentStream propiedades.

+0

sí, tanto DocumentText como DocumentStream pueden devolver la fuente correcta de HTML. Pero cuando agrego algunos atributos a los nodos en el árbol DOM (myIHTMLElement.setAttribute()), la fuente HTML obtenida por WebBrowser1.DocumentText no contiene ningún atributo agregado – Rockycqu

+0

@Rockucqu, ¿qué pasa con la propiedad 'InnerHtml' - ¿eso devuelve html correcto? – VinayC

1

has necesitado WebBrowser1.DocumentText

+0

sí, WebBrowser1.DocumentText devuelve la fuente HTML correcta. Pero cuando agrego algunos atributos a los nodos en el árbol DOM (myIHTMLElement.setAttribute()), la fuente HTML obtenida por WebBrowser1.DocumentText no contiene ningún atributo agregado – Rockycqu

-2

Tener un vistazo a esto. WebBrowser on MSDN

alternativa se puede utilizar Webclient.DownloadString de System.Net (también tiene WebClient.DownloadStringAsync ...) Aquí está la descripción: WebClient on MSDN

+1

en mi aplicación, necesito usar WebBrowser para agregar información de coordenadas a cada nodo y da salida a su fuente HTML con información de coordenadas que se agrega como atributos de nodos. Webclient no puede realizar esta tarea – Rockycqu

3

Gracias a todos. Mi solución final es: primero, usar body.outlineHtml para obtener la fuente html. porque body.outlineHtml puede pasar por alto la etiqueta final para <li> y <td>, por lo que el segundo paso es usar tidy para reparar la fuente HTML. después de esto, podemos obtener la fuente HTML sin error

+1

Bueno, adelante, marque como respuesta – V4Vendetta

0

Si desea obtener todo el código fuente HTML del control WebBrowser, utilice esto: WebBrowser1.Document.GetElementsByTagName ("HTML"). Item (0) .OuterHtml. Esto, por supuesto, asume que tienes el formato correcto de HTML y existe la etiqueta HTML. Si desea limitarlo solo al cuerpo, obviamente cambie la etiqueta HTML a la etiqueta BODY. De esta forma puede tomar todos los cambios después de que se haya configurado "DocumentText". Lo siento, soy un tipo de VB, convierta según sea necesario;)

Cuestiones relacionadas