如何使用 WPF Web 浏览器组件从网页读取元素内容
本文关键字:读取 网页 元素 组件 何使用 WPF Web 浏览器 | 更新日期: 2023-09-27 18:18:04
如何使用 WPF WebBrowser 组件从 C# 中的网页获取元素值?
例如,我想从此页面 http://www.forexpros.com/currencies/usd-gel 获取此值 1.7655。
谢谢
为了获取 WPF WebBrowser
的内容,我在某处找到了这个解决方案,这似乎有效,但前提是目标框架至少为 .Net 4.0 并且您包含Microsoft.CSharp.dll
(如果您的目标框架是 <4.0,则无法选择(。我在LoadCompleted
中添加了它:
private void myBrowser_LoadCompleted(object sender, NavigationEventArgs e)
{
dynamic doc = myBrowser.Document;
dynamic htmlText = doc.documentElement.InnerHtml;
string htmlstring = htmlText;
}
加
myBrowser.LoadCompleted += new LoadCompletedEventHandler(myBrowser_LoadCompleted);
InitializeComponent()
后,以确保调用该方法。
调用 WPF 的 WebBrowser
组件的 Navigate
方法打开网页后,DocumentCompleted
事件到达,您可以安全地浏览页面的内容(请注意,有时此事件会发生多次(。WebBrowser
的 Document
属性包含已处理格式的 HTML,称为 DOM 树。不幸的是,您无法轻松使用此属性,因为它只是一个 object
.此功能尚未在 WPF 中完成(2011 年 12 月(。
我会改用 Winforms 版本的 WebBrowser
。如果将它嵌入到 WindowsFormsHost
中,则可以在 WPF 应用程序中使用它。这个类是完整的:它的Document
属性是一个HtmlDocument
对象,带有一个Body
属性,这是一个HtmlElement
,它包含页面的内容。您可以递归地遍历 DOM 树以查找所需的元素(并读取其InnerText
(,或者只是使用 Regex 或 HTML 解析器库处理整个页面的文本。
不会有从随机元素中获取值的通用方法 - 您需要知道特定页面的 HTML 结构,以及如何找到您要查找的元素。但是如果你知道这两个,你可以把页面读成某种HTML文档(如果保证HTML的结构正确,XmlDocument
会起作用(,然后从那里获取值。
(可选(您可以通过某种 HTML 清理(也许是 NTidy?(运行页面,然后将其加载到 XmlDocument 中。这种方法的一个缺点是页面的结构在清理过程中可能会更改。
有多个选项可以从网页中读取值。
- 在 Web 浏览器控件中获取页面。然后尝试找出包含所需值的元素是否具有特定名称,并从 Web 浏览器控件的文档属性中获取该元素。
- 使用 HtmlAgilityPack 来分析该网页的 html,以查找元素并从中获取值。
- 尝试找出网页是否具有一定的结构,并使用正则表达式来查找所需的值(可能很棘手!
看,你有很多方法可以找到你想要的价值(我认为这不是所有的选择(。因此,请继续花一些精力来获得该值。而且,如果您对某个问题有疑问,请不要犹豫,在堆栈溢出上再次提问。但是,请花一些时间来制定您的问题。记住:一个好的问题往往会得到好的答案!