如何使用 WPF Web 浏览器组件从网页读取元素内容

本文关键字:读取 网页 元素 组件 何使用 WPF Web 浏览器 | 更新日期: 2023-09-27 18:18:04

如何使用 WPF WebBrowser 组件从 C# 中的网页获取元素值?

例如,我想从此页面 http://www.forexpros.com/currencies/usd-gel 获取此值 1.7655。

谢谢

如何使用 WPF Web 浏览器组件从网页读取元素内容

为了获取 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 事件到达,您可以安全地浏览页面的内容(请注意,有时此事件会发生多次(。WebBrowserDocument 属性包含已处理格式的 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 中。这种方法的一个缺点是页面的结构在清理过程中可能会更改。

有多个选项可以从网页中读取值。

  1. 在 Web 浏览器控件中获取页面。然后尝试找出包含所需值的元素是否具有特定名称,并从 Web 浏览器控件的文档属性中获取该元素。
  2. 使用 HtmlAgilityPack 来分析该网页的 html,以查找元素并从中获取值。
  3. 尝试找出网页是否具有一定的结构,并使用正则表达式来查找所需的值(可能很棘手!
所以,你

看,你有很多方法可以找到你想要的价值(我认为这不是所有的选择(。因此,请继续花一些精力来获得该值。而且,如果您对某个问题有疑问,请不要犹豫,在堆栈溢出上再次提问。但是,请花一些时间来制定您的问题。记住:一个好的问题往往会得到好的答案!