我实际上正在使用WPF和WPF WebBrowser在C#中进行个人项目。我真的需要像以前在javascript或php..etc中一样探索html DOM元素。

在我的MainWindow中,我有这个变量:

private mshtml.HTMLDocument mainDocument = new mshtml.HTMLDocument();


在我的webBrowser LoadComplete回调中,我有以下内容:

mainDocument = (mshtml.HTMLDocument) mainBrowser.Document;


好的,这很好,正在运行。

现在,如果我这样做:

mshtml.IHTMLElement elem = mainDocument.getElementById("MY_ID");


它也非常好,可以做elem.innerHTML或类似的东西。

但是我的问题是只有HTMLDocument具有通过ID,标记名..etc查找元素的方法

我不知道如何在IHTMLElement中查找元素。我尝试了一些类似将IHTMLElement强制转换为IHTMLElement2..etc的操作,但是没有任何效果。

如果您有任何想法请。许多人谈论托管Winforms Webbrowser,但我认为它必须有一种仅使用mshtml的方法。

非常感谢,
如果您需要更多信息,请随时问我

ps:我是法国人,所以我对我的英语水平感到抱歉

最佳答案

如果要在Winforms或wpf中解析HTML文档,则可以使用出色的解析器htmlagility包。请参考以下链接
http://html-agility-pack.net

  var url = "http://html-agility-pack.net/";
 var web = new HtmlWeb();
 var doc = web.Load(url);


将其加载到doc中后,您可以获取任何属性,标签等。

 var value = doc.DocumentNode
.SelectNodes("//td/input")
.First()
.Attributes["value"].Value;


这非常容易,只需稍微浏览一下文档即可充分利用它。

您甚至可以从webbrowser加载html敏捷包,如下所示

HtmlAgilityPack.HtmlDocument doc = new
HtmlAgilityPack.HtmlDocument();
            doc.Load(webBrowser1.DocumentStream);


或者你可以这样

HtmlAgilityPack.HtmlDocument doc = new
HtmlAgilityPack.HtmlDocument();
            doc.Load(webBrowser1.Document);


谢谢

09-30 13:23
查看更多