【发布时间】:2016-04-24 00:00:11
【问题描述】:
如何在不获取 vb.net 中的任何属性的情况下将任何文本获取到 WebBrowser 文档中?!
例子1:
<h1>text here</h1>
例子2:
<h1 name="anything">text here</h1>
我怎样才能得到“这里的文字”?!
谢谢。 :)
【问题讨论】:
-
我不禁注意到您一直在线。我的回答有用吗? :)
如何在不获取 vb.net 中的任何属性的情况下将任何文本获取到 WebBrowser 文档中?!
例子1:
<h1>text here</h1>
例子2:
<h1 name="anything">text here</h1>
我怎样才能得到“这里的文字”?!
谢谢。 :)
【问题讨论】:
您可以 1) 使用 WebBrowser 的内置方法遍历所有 <h1> 标记或获取第一个标记,或者 2) 使用正则表达式.
使用内置方法
虽然所有标签的迭代很简单,但您只需要使用HtmlDocument.GetElementsByTagName() 方法。
获取第一个找到的标签(按时间顺序):
Dim h1Text As String = WebBrowser1.Document.GetElementsByTagName("h1")(0).InnerText
遍历所有标签:
Dim h1Strings As New List(Of String)
For Each h1Tag As HtmlElement In WebBrowser1.Document.GetElementsByTagName("h1")
h1Strings.Add(h1Tag.InnerText)
Next
使用正则表达式
如果您知道自己在做什么,那么使用正则表达式并不难。首先将Imports 语句放在代码文件的最顶部:
Imports System.Text.RegularExpressions
现在您只需在 WebBrowser 的 DocumentText 中搜索 <h1> 标记。
Dim h1Text As String = Regex.Match(WebBrowser1.DocumentText, "(?<=<h1[^<>\/]*>)((?!<\/h1>).)*(?=<\/h1>)", RegexOptions.IgnoreCase).Value
正则表达式模式解释:
(?<=<h1[^<>\/]*>)((?!<\/h1>).)*(?=<\/h1>)
(?<= ...):匹配的文本必须以... 开头。
<h1[^<>\/]*>:将<h1> 开始标记与任何属性匹配。
[^<>\/]*:匹配所有不是<、>或/的字符。
((?!<\/h1>).)*:匹配所有不是前面有</h1>标签的字符。
(?=<\/h1>): 匹配必须
后跟一个</h1> 标签。
【讨论】: