Используйте explorer.document в качестве исходного HtmlDocument для HtmlAgilityPack

Я хочу использовать загруженную веб-страницу в Internet Explorer как HtmlDocument в HtmlAgilityPack. Я использую документ Explorer через mshtml в качестве COM-объекта.

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

Затем я попытался преобразовать его в HtmlDocument, который используется в HtmlAgilityPack

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

Но это не работает из-за неверной операции приведения. Сообщение об исключении показано ниже.

Сообщение об исключении

В любом случае я хочу использовать текущую загруженную веб-страницу в качестве источника для htmlagilitypack, я знаю, что могу использовать HtmlWeb, предоставляемый пакетом htmlagility, и загружать текущий URL, но я хочу выделить элементы, которые находятся на загруженной странице (элементы, найденные с помощью htmlagilitypack), я думаю, что это не может быть сделано с помощью такого рода реализации. Любые идеи для реализации любой поддержки будут отличными. Благодарю.

1 ответ

Решение

Конечно, вы не можете бросать между mshtml.HTMLDocument а также HtmlAgilityPack.HtmlDocument Это совершенно разные классы из разных библиотек, где одна является чисто управляемой, а другая - управляемой оболочкой COM.

Что вы можете сделать, это взять HTML из mshtml.HTMLDocument и загрузите его в пакет Agility.

Возможно, что-то вроде этого:

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

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

  targetDoc.LoadHtml(documentContents);

Вы также можете использовать IPersistStream а затем вызвать метод Save, передать MemoryStream и затем передайте это HtmlAgility Pack.

Другие вопросы по тегам