查找下一个功能

时间:2016-03-19 14:03:25

标签: vb.net

我有一个小问题需要帮助。

我有一个webbrowser,以及一个从类中查找文本的按钮,下面是代码:

Dim word As String = (WebBrowser1.Document.GetElementsByTagName("P").Cast(Of HtmlElement) _
       .FirstOrDefault(Function(el) el.GetAttribute("className") = "tagline").InnerText)

    Dim lastWord As String = word.Split(" ").Last

    If Not ListBox1.Items.Contains(lastWord) Then
        ListBox1.Items.Add(lastWord)
    End If

该网站有多个类,名称为“标语”,我希望按下按钮后再按下它。 我怎样才能做到这一点..?

1 个答案:

答案 0 :(得分:0)

您需要一个全局变量来保存您要检索的“标语”的索引。并使用此索引器作为Skip方法的参数,以应用于Where而不是FirstOrDefault返回的序列

' Declared at the global level
Dim index as Integer = 0

' At each button press you write
 Dim word As String = WebBrowser1.Document.GetElementsByTagName("P") _ 
   .Cast(Of HtmlElement) _
   .Where(Function(el) el.GetAttribute("className")  = "tagline") _
   .Skip(index) _ 
   .First().InnerText
Dim lastWord As String = word.Split(" ").Last
index = index + 1

所以在下一个按钮按下你跳到第二个元素然后到第三个,依此类推。然而,这带来了问题。您应该知道WebBrowser文档中存在多少元素,以避免请求不可靠的元素。因此,或许最好使用“标语”属性获取所有元素,并将它们保存在可以轻松检索的列表中

' Declared at the global level
Dim index as Integer = 0
Dim elements = new List(Of HtmlElement)()

' After you have loaded the document
elements = WebBrowser1.Document.GetElementsByTagName("P") _ 
           .Cast(Of HtmlElement) _
           .Where(Function(el) _ 
              el.GetAttribute("className")  = "tagline") _
           .ToList()    

并在按钮代码中

if index < elements.Count Then
    Dim word = elements.Skip(index).First().InnerText
    Dim lastWord As String = word.Split(" ").Last
    index = index + 1
End if