Utilizzare explorer.document come origine HtmlDocument per HtmlAgilityPack

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

Domanda

Voglio utilizzare la pagina Web attualmente caricata in Internet Explorer come HtmlDocument in HtmlAgilityPack. Sto usando il documento explorer tramite mshtml come oggetto COM.

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

Quindi ho provato a convertirlo in HtmlDocument che sta usando in HtmlAgilityPack

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

Ma non funziona a causa di un'operazione di cast non valida. Il messaggio di eccezione è mostrato sotto.

Messaggio di eccezione

Comunque voglio usare la pagina web attualmente caricata come sorgente per htmlagilitypack, so che posso usare HtmlWeb fornito da htmlagility pack e caricare l'url corrente ma voglio evidenziare gli elementi che sono nella pagina caricata (elementi trovati usando htmlagilitypack) Immagino che non possa essere fatto attraverso questo tipo di implementazione. Qualsiasi idea per implementare questo supporto sarà grande. Grazie.

Risposta accettata

Ovviamente non è possibile eseguire il cast tra mshtml.HTMLDocument e HtmlAgilityPack.HtmlDocument , sono classi completamente distinte da librerie diverse, in cui una è gestita esclusivamente e l'altra è un wrapper COM gestito.

Quello che puoi fare è prendere l'HTML dal mshtml.HTMLDocument e caricarlo nel Agility Pack.

Probabilmente qualcosa in questo senso:

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

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

  targetDoc.LoadHtml(documentContents);

È anche possibile utilizzare IPersistStream e chiamare il metodo Save, passare un MemoryStream e quindi inviarlo a HtmlAgilityPack.



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché