我想在Internet Explorer中将当前加载的网页用作HtmlAgilityPack中的HtmlDocument
。我通过mshtml使用资源管理器文件作为COM对象。
mshtml.HTMLDocument doc = explorer.Document as mshtml.HTMLDocument;
然后我尝试将其转换为在HtmlAgilityPack中使用的HtmlDocument
HtmlAgilityPack.HtmlDocument hdoc = (HtmlAgilityPack.HtmlDocument)doc;
但由于无效的施法操作,它无法正常工作。异常消息如下所示。
无论如何我想使用当前加载的网页作为htmlagilitypack的源代码,我知道我可以使用htmlagility包提供的HtmlWeb并加载当前的url但是我想突出显示加载页面中的元素(使用htmlagilitypack找到的元素)我猜测不能通过这种实现来完成。任何实现这一支持的想法都会很棒。感谢。
答案 0 :(得分:4)
当然,你不能在mshtml.HTMLDocument
和HtmlAgilityPack.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。