使用explorer.document作为HtmlAgilityPack的源HtmlDocument

时间:2014-08-26 07:30:15

标签: c# internet-explorer html-agility-pack mshtml microsoft.mshtml

我想在Internet Explorer中将当前加载的网页用作HtmlAgilityPack中的HtmlDocument。我通过mshtml使用资源管理器文件作为COM对象。

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

然后我尝试将其转换为在HtmlAgilityPack中使用的HtmlDocument

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

但由于无效的施法操作,它无法正常工作。异常消息如下所示。

Exception Message

无论如何我想使用当前加载的网页作为htmlagilitypack的源代码,我知道我可以使用htmlagility包提供的HtmlWeb并加载当前的url但是我想突出显示加载页面中的元素(使用htmlagilitypack找到的元素)我猜测不能通过这种实现来完成。任何实现这一支持的想法都会很棒。感谢。

1 个答案:

答案 0 :(得分:4)

当然,你不能在mshtml.HTMLDocumentHtmlAgilityPack.HtmlDocument之间进行转换,它们是来自不同库的完全不同的类,其中一个是纯托管的,另一个是托管的COM包装器。

您可以从mshtml.HTMLDocument获取HTML并将其加载到Agility Pack中。

可能就是这样:

  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。