Verwenden Sie explorer.document als Quell-HtmlDocument für HtmlAgilityPack

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

Frage

Ich möchte die aktuell geladene Webseite im Internet Explorer als HtmlDocument in HtmlAgilityPack verwenden. Ich verwende das Explorer-Dokument über mshtml als COM-Objekt.

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

Dann habe ich versucht, es in HtmlDocument zu konvertieren, das in HtmlAgilityPack verwendet

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

Aber es funktioniert nicht wegen ungültiger Cast-Operation. Die Ausnahmebedingungsnachricht wird unten angezeigt.

Ausnahmebedingung

Irgendwie möchte ich die aktuell geladene Webseite als Quelle für htmlagilitypack verwenden, ich weiß, dass ich HtmlWeb von htmlagility pack verwenden und die aktuelle URL laden kann, aber Elemente in der geladenen Seite hervorheben will (Elemente, die mit htmlagilitypack gefunden werden) durch diese Art der Implementierung getan werden. Irgendwelche Ideen, um diese Unterstützung umzusetzen, werden groß sein. Vielen Dank.

Akzeptierte Antwort

Natürlich können Sie nicht zwischen mshtml.HTMLDocument und HtmlAgilityPack.HtmlDocument , sie sind völlig unterschiedliche Klassen aus verschiedenen Bibliotheken, wobei eine davon nur verwaltet wird und die andere ein verwalteter COM-Wrapper ist.

Sie können den HTML- mshtml.HTMLDocument aus dem mshtml.HTMLDocument und in das Agility Pack laden.

Wahrscheinlich etwas in dieser Richtung:

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

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

  targetDoc.LoadHtml(documentContents);

Sie können auch IPersistStream und anschließend die Save-Methode aufrufen, einen MemoryStream und dann an das HtmlAgilityPack-Objekt übergeben.




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum