2

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

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

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

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

但由于无效的强制转换操作,它不起作用。异常消息如下所示。

异常消息

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

4

1 回答 1

4

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

您可以做的是从 中获取 HTMLmshtml.HTMLDocument并将其加载到 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 方法,将 a 传递MemoryStream给 HtmlAgilityPack。

于 2014-08-26T08:43:31.397 回答