如何从 WPF WebBrowser 获取 HtmlElementCollection
How can I get an HtmlElementCollection from a WPF WebBrowser
我的旧 WinForm 应用程序使用 HtmlElementCollection 来处理页面
HtmlElementCollection hec = this.webbrowser.Document.GetElementsByTagName("input");
在 WPF WebBrowser 中,有几处不同。例如
this.webbrowser.Document 没有任何名为 GetElementsByTagName
的方法
因此我的代码无法获取 HtmlElementCollection
您需要添加对 Microsoft.mshtml
的引用,然后您需要将文档转换为 mshtml.HTMLDocument
。在你这样做之后你应该能够使用 getElementsByTagName()
方法
var document = webBrowser.Document as mshtml.HTMLDocument;
var inputs = document.getElementsByTagName("input");
foreach (mshtml.IHTMLElement element in inputs)
{
}
getElementsByTagName()
returns mshtml.IHTMLElementCollection
并且每个项目都是 mshtml.IHTMLElement
类型
编辑
另一种解决方案,如果您需要使用 WinForms WebBrowser
,您可以使用它来代替 WPF。添加对 WindowsFormsIntegration
和 System.Windows.Forms
的引用,在 XAML 中创建命名空间并使用不同的浏览器控件
<Window ...
xmlns:winforms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
<WindowsFormsHost>
<winforms:WebBrowser x:Name="webBrowser"/>
</WindowsFormsHost>
</Window>
我的旧 WinForm 应用程序使用 HtmlElementCollection 来处理页面
HtmlElementCollection hec = this.webbrowser.Document.GetElementsByTagName("input");
在 WPF WebBrowser 中,有几处不同。例如
this.webbrowser.Document 没有任何名为 GetElementsByTagName
的方法因此我的代码无法获取 HtmlElementCollection
您需要添加对 Microsoft.mshtml
的引用,然后您需要将文档转换为 mshtml.HTMLDocument
。在你这样做之后你应该能够使用 getElementsByTagName()
方法
var document = webBrowser.Document as mshtml.HTMLDocument;
var inputs = document.getElementsByTagName("input");
foreach (mshtml.IHTMLElement element in inputs)
{
}
getElementsByTagName()
returns mshtml.IHTMLElementCollection
并且每个项目都是 mshtml.IHTMLElement
类型
编辑
另一种解决方案,如果您需要使用 WinForms WebBrowser
,您可以使用它来代替 WPF。添加对 WindowsFormsIntegration
和 System.Windows.Forms
的引用,在 XAML 中创建命名空间并使用不同的浏览器控件
<Window ...
xmlns:winforms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
<WindowsFormsHost>
<winforms:WebBrowser x:Name="webBrowser"/>
</WindowsFormsHost>
</Window>