我想在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找到的元素)我猜它不能通过这种实施来完成。任何支持实现这一点的想法都会很棒。谢谢。
当然你不能在mshtml.HTMLDocument
和HtmlAgilityPack.HtmlDocument
之间进行mshtml.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。