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

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

Вопрос

Я хочу использовать загруженную в настоящий момент веб-страницу в 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). Я думаю, это не может быть осуществлены посредством такого рода реализации. Любые идеи для реализации этой поддержки будут отличными. Благодарю.

Принятый ответ

Конечно, вы не можете использовать между 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 и затем передать его в HtmlAgilityPack.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему