从 WebBrowser 访问 DOM

Posted

技术标签:

【中文标题】从 WebBrowser 访问 DOM【英文标题】:Accessing DOM from WebBrowser 【发布时间】:2012-10-08 15:51:54 【问题描述】:

我正在尝试实现一个类似于浏览器的小应用程序,它允许我修改查看的网站外观(例如,使链接的字体更大)。它专为 Microsoft Surface 设计,可在巨大的触摸屏上使用。它使用 WPF 作为 UI。

我打算为此任务使用 WebBrowser 控件。但是,文档中有两个名为 WebBrowser 的类。其中一个在System.Windows.Forms,另一个在System.Windows.Controls。第一个可以访问 DOM 模型,但适用于 Forms 应用程序(如果我理解正确,那绝对不是我所拥有的)。如果您在 xaml 中添加控制器,则默认添加第二个,但它无法访问 DOM。

那么,如何从 Surface 的 WebBrowser 访问 DOM 模型?我对 c# 和 Microsoft 技术非常陌生,因此如果我的问题不清楚或显而易见,我深表歉意。

【问题讨论】:

【参考方案1】:

对于System.Windows.Controls.WebBrowser 类,您可以使用 Document 属性。 将mshtml 引用添加到您的项目中,该引用应该可以通过右键单击项目并选择添加引用来获得,然后您应该能够将其转换为 mshtml.IHTMLDocument2

mshtml.IHTMLDocument2 htmlDoc = webBrowser.Document as mshtml.IHTMLDocument2;
// do something like find button and click
htmlDoc.all.item("testBtn").click(); 

【讨论】:

非常感谢!一个简单的问题 - 我应该在哪里找到这些信息?因为我在任何地方都找不到... 我可以读取动态 dom 吗?我的意思是,如果 webbrowser 中的页面使用 ajax 构建 html 动态,我可以阅读它吗? 应该是webBrowser.Document.DomDocument @Ahmad 这个答案与 Controls.WebBrowser 相关,而不是 Forms.WebBrowser

以上是关于从 WebBrowser 访问 DOM的主要内容,如果未能解决你的问题,请参考以下文章

C#webbrowser 跨域访问时 如何获得对此网页的绝对权限

使用 WebBrowser 访问 DOM

C# WebBrowser 控件:window.external 访问子对象

访问文件夹时,Webbrowser 控件身份验证不起作用

delphi webbrowser 问题

嵌入式 WebBrowser Web 控制台访问