Manejo del Document Object Model de Internet Explorer con C#

07/06/2004 - 19:47 por Roberto | Informe spam
Hola:

¿Alguno de los miembros del grupo podría decirme si
existe algún medio de acceder al Document Object Model
que Internet Explorer construye a partir de un documento
html desde una aplicación en C#? Mi problema es que
necesito hacer un parser de html y he creído que acceder
al document Object Model es el mejor modo de hacerlo. He
revisado en la biblioteca de clases del .NET Framework
pero solo he encontrado soporte para xml.

Cualquier información o sugerencia sobre el tema la
agradeceré muchísimo pues la necesito con urgencia y mis
conocimientos del lenguaje C# y el .NET Framework aún son
algo escasos.

Saludos,

Roberto.

Preguntas similare

Leer las respuestas

#1 Jose Marcenaro
07/06/2004 - 23:09 | Informe spam
Hola Roberto

Para acceder al DOM del IE, el código debe estar ejecutandose en el mismo
lugar en que está el IE, es decir:

- en una aplicación ASPNET, el código debería correr del lado cliente (el
navegador). O sea que solamente podrias usar código javascript
- lo que sí podrías hacer es una aplicacion .NET de tipo WinForms que
contenga un control explorador (el ActiveX del IE) y entonces sí usarla para
cargar un HTML y recorrer su modelo de objetos... al cual accedes a traves
de la propiedad document del control.

No es una aplicación muy común, pero es una idea interesante.
Si lo haces, cuenta en este foro si has tenido exito

Otra forma de hacer -en código .NET- parsing de HTML sin usar el modelo de
objetos del IE, es utilizar una biblioteca de clases (de código abierto)
publicada por Chris Lovett en GotDotNet, tal vez te sirva darle una mirada:

http://www.gotdotnet.com/Community/...BD760564BC

Saludos
Jose Marcenaro

"Roberto" escribió en el mensaje
news:1969201c44cb7$72eae7a0$
Hola:

¿Alguno de los miembros del grupo podría decirme si
existe algún medio de acceder al Document Object Model
que Internet Explorer construye a partir de un documento
html desde una aplicación en C#? Mi problema es que
necesito hacer un parser de html y he creído que acceder
al document Object Model es el mejor modo de hacerlo. He
revisado en la biblioteca de clases del .NET Framework
pero solo he encontrado soporte para xml.

Cualquier información o sugerencia sobre el tema la
agradeceré muchísimo pues la necesito con urgencia y mis
conocimientos del lenguaje C# y el .NET Framework aún son
algo escasos.

Saludos,

Roberto.
Respuesta Responder a este mensaje
#2 Roberto
08/06/2004 - 00:42 | Informe spam
Hola Roberto

Para acceder al DOM del IE, el código debe estar


ejecutandose en el mismo
lugar en que está el IE, es decir:

- en una aplicación ASPNET, el código debería correr del


lado cliente (el
navegador). O sea que solamente podrias usar código


javascript
- lo que sí podrías hacer es una aplicacion .NET de tipo


WinForms que
contenga un control explorador (el ActiveX del IE) y


entonces sí usarla para
cargar un HTML y recorrer su modelo de objetos... al


cual accedes a traves
de la propiedad document del control.

No es una aplicación muy común, pero es una idea


interesante.
Si lo haces, cuenta en este foro si has tenido exito

Otra forma de hacer -en código .NET- parsing de HTML sin


usar el modelo de
objetos del IE, es utilizar una biblioteca de clases (de


código abierto)
publicada por Chris Lovett en GotDotNet, tal vez te


sirva darle una mirada:

http://www.gotdotnet.com/Community/...Details.as


px?SampleGuid¹0FDDCE-E60D-43F8-A5C4-C3BD760564BC

Saludos
Jose Marcenaro

"Roberto" escribió


en el mensaje
news:1969201c44cb7$72eae7a0$
Hola:

¿Alguno de los miembros del grupo podría decirme si
existe algún medio de acceder al Document Object Model
que Internet Explorer construye a partir de un documento
html desde una aplicación en C#? Mi problema es que
necesito hacer un parser de html y he creído que acceder
al document Object Model es el mejor modo de hacerlo. He
revisado en la biblioteca de clases del .NET Framework
pero solo he encontrado soporte para xml.

Cualquier información o sugerencia sobre el tema la
agradeceré muchísimo pues la necesito con urgencia y mis
conocimientos del lenguaje C# y el .NET Framework aún son
algo escasos.

Saludos,

Roberto.


.
Hola Jose:



Lo que intento hacer es justo lo que indicas, o sea
cargar el documento html con el ActiveX del IE y acceder
al DOM a través de la propiedad Document, pero dicha
propiedad me devuelve un puntero extraño al parecer de
tipo Object con el cual no sé qué hacer. Sospecho que
debo convertir este puntero a un tipo determinado para
obtener el DOM. A lo mejor lo que me falta es una
tontería pero no alcanzo a darme cuenta cuál es.

Le hecharé un vistazo a la biblioteca de clases que me
indicas para ver si me sirve.

Saludos y muchas gracias,

Roberto.
Respuesta Responder a este mensaje
#3 Anonimo
08/06/2004 - 08:49 | Informe spam
Podría usted realizar aporte de código de cómo acceder y
manejar el ActiveX de IE ?.
Alguien conoce alguna referencia ?
Respuesta Responder a este mensaje
#4 Jose Marcenaro
08/06/2004 - 23:55 | Informe spam
El control a utilizar es el axWebBrowser (puedes buscar en Google.com por
ese nombre)

Los pasos a seguir son los siguientes:

- Crear una aplicacion WinForms

- Agregar a la toolbox de VS.NET el elemento (de la Solapa COM) "Microsoft
Web Browser", que es precisamente el control axWebBrowser

- Arrastrar el control a un Form

- A las referencias del proyecto agregar (de la solapa NET) el assembly
Microsoft.mshtml para obtener los tipos de dato internos al documento

- Navegar a una página determinada mediante axWebBrowser1.Navigate; por
ejemplo:
object flags = null;
object targetFrameName = null;
object postData = null;
object headers = null;
axWebBrowser1.Navigate("localhost/fwkadm",ref flags, ref
targetFrameName, ref postData, ref headers);

- Luego de que la página se cargue (en el click de otro boton, por ejemplo),
puede accederse al modelo de objetos del IE de esta forma:
mshtml.HTMLDocument doc = (mshtml.HTMLDocument)axWebBrowser1.Document;
mshtml.IHTMLElementCollection coll = doc.all;
mshtml.HTMLSpanElementClass span1 = (mshtml.HTMLSpanElementClass)
coll.item("mark",null); // busca id="mark"
MessageBox.Show(span1.innerHTML);

Saludos
Jose Marcenaro

escribió en el mensaje
news:1959e01c44d24$af900830$
Podría usted realizar aporte de código de cómo acceder y
manejar el ActiveX de IE ?.
Alguien conoce alguna referencia ?
Respuesta Responder a este mensaje
#5 Roberto
12/06/2004 - 09:05 | Informe spam
Hola Jose:

La solución que me has dado me ha salvado. ¡Muchísimas
gracias! Con esto
creo que ya podré iniciar mi desarrollo.

He probado también el parser que me sugeriste pero según
parece por el
código de ejemplo que lo acompaña está más orientado a
xml que a html así
que es poco probable que lo utilice.

Si tienes o sabes dónde encontrar información en español
sobre el assembly
Microsoft.mshtml también te lo agradeceré pues he buscado
en google y no he
encontrado nada, y ciertamente traducir la información
del msdn es una tarea
algo ardua sobre todo para alguien que como yo aún no
tiene un profundo
dominio del inglés.

Saludos afectuosos desde Cuba,

Roberto.
El control a utilizar es el axWebBrowser (puedes buscar


en Google.com por
ese nombre)

Los pasos a seguir son los siguientes:

- Crear una aplicacion WinForms

- Agregar a la toolbox de VS.NET el elemento (de la


Solapa COM) "Microsoft
Web Browser", que es precisamente el control axWebBrowser

- Arrastrar el control a un Form

- A las referencias del proyecto agregar (de la solapa


NET) el assembly
Microsoft.mshtml para obtener los tipos de dato internos


al documento

- Navegar a una página determinada mediante


axWebBrowser1.Navigate; por
ejemplo:
object flags = null;
object targetFrameName = null;
object postData = null;
object headers = null;
axWebBrowser1.Navigate("localhost/fwkadm",ref flags,


ref
targetFrameName, ref postData, ref headers);

- Luego de que la página se cargue (en el click de otro


boton, por ejemplo),
puede accederse al modelo de objetos del IE de esta


forma:
mshtml.HTMLDocument doc = (mshtml.HTMLDocument)


axWebBrowser1.Document;
mshtml.IHTMLElementCollection coll = doc.all;
mshtml.HTMLSpanElementClass span1 =


(mshtml.HTMLSpanElementClass)
coll.item("mark",null); // busca id="mark"
MessageBox.Show(span1.innerHTML);

Saludos
Jose Marcenaro

escribió en el


mensaje
news:1959e01c44d24$af900830$
Podría usted realizar aporte de código de cómo acceder y
manejar el ActiveX de IE ?.
Alguien conoce alguna referencia ?


.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida