Utilisez explorer.document comme source HtmlDocument pour HtmlAgilityPack

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

Question

Je souhaite utiliser la page Web actuellement chargée dans Internet Explorer en tant que HtmlDocument dans HtmlAgilityPack. J'utilise le document de l'explorateur via mshtml comme objet COM.

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

Ensuite, j'ai essayé de le convertir en HtmlDocument qui utilise HtmlAgilityPack

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

Mais cela ne fonctionne pas en raison d'une opération de conversion invalide. Le message d'exception est présenté ci-dessous.

Message d'exception

Quoi qu'il en soit, je souhaite utiliser la page Web actuellement chargée comme source de htmlagilitypack. Je sais que je peux utiliser HtmlWeb fourni par htmlagility pack et charger l'URL actuelle, mais je souhaite mettre en surbrillance les éléments figurant dans la page chargée (éléments trouvés avec htmlagilitypack). être fait à travers ce genre de mise en œuvre. Toutes les idées pour mettre en œuvre ce soutien seront géniales. Merci.

Réponse acceptée

Bien sûr, vous ne pouvez pas mshtml.HTMLDocument entre mshtml.HTMLDocument et HtmlAgilityPack.HtmlDocument , ce sont des classes complètement distinctes de différentes bibliothèques, où l’une est purement gérée et l’autre est un wrapper COM géré.

Ce que vous pouvez faire est d' mshtml.HTMLDocument le code HTML du mshtml.HTMLDocument et de le charger dans le pack Agility.

Probablement quelque chose dans ce sens:

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

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

  targetDoc.LoadHtml(documentContents);

Vous pouvez également utiliser IPersistStream , puis appeler la méthode Save, transmettre un MemoryStream , puis l’envoyer au HtmlAgilityPack.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi