如何从 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。添加对 WindowsFormsIntegrationSystem.Windows.Forms 的引用,在 XAML 中创建命名空间并使用不同的浏览器控件

<Window ...
    xmlns:winforms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms">
    <WindowsFormsHost>
        <winforms:WebBrowser x:Name="webBrowser"/>
    </WindowsFormsHost>
</Window>