我有一个小问题需要帮助。
我有一个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
该网站有多个类,名称为“标语”,我希望按下按钮后再按下它。 我怎样才能做到这一点..?
答案 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