Use explorer.document como fuente HtmlDocument para HtmlAgilityPack

c# html-agility-pack internet-explorer microsoft.mshtml mshtml

Pregunta

Quiero usar la página web cargada actualmente en internet explorer como HtmlDocument en HtmlAgilityPack. Estoy utilizando el documento del explorador a través de mshtml como objeto COM.

mshtml.HTMLDocument doc = explorer.Document as mshtml.HTMLDocument;

Luego traté de convertirlo a HtmlDocument que se usa en HtmlAgilityPack

HtmlAgilityPack.HtmlDocument hdoc = (HtmlAgilityPack.HtmlDocument)doc;

Pero no está funcionando debido a una operación de conversión inválida. El mensaje de excepción se muestra a continuación.

Mensaje de excepción

De todos modos, quiero usar la página web cargada actualmente como fuente para htmlagilitypack, sé que puedo usar HtmlWeb proporcionado por htmlagility pack y cargar la url actual, pero quiero resaltar los elementos que están en la página cargada (elementos que se encuentran usando htmlagilitypack) Supongo que no puedo Se hará a través de ese tipo de implementación. Cualquier idea para implementar esto, cualquier apoyo será grande. Gracias.

Respuesta aceptada

Por supuesto, no se puede convertir entre mshtml.HTMLDocument y HtmlAgilityPack.HtmlDocument , son clases completamente distintas de diferentes bibliotecas, donde una es puramente administrada y la otra es un contenedor COM administrado.

Lo que puedes hacer es tomar el HTML del mshtml.HTMLDocument y cargarlo en el paquete de agilidad.

Probablemente algo en este sentido:

  mshtml.IHTMLDocument3 sourceDoc = (mshtml.IHTMLDocument3) explorer.Document;  
  string documentContents = sourceDoc.documentElement.outerHTML; 

  HtmlAgilityPack.HtmlDocument targetDoc = new HtmlAgilityPack.HtmlDocument();

  targetDoc.LoadHtml(documentContents);

También puede usar IPersistStream y luego llamar al método Save, pasar un MemoryStream y luego enviarlo a HtmlAgilityPack.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow