刚刚加入这里并开始学习vb.net。我四处搜寻,但没有碰到任何东西。在Visual Studio中使用Vb.net和WebBrowser。我有一个网页,上面有我要点击的按钮。该按钮显示9次,代码相同。所以基本上相同的按钮会多次显示。当我在vb.net中创建一个函数来单击按钮时,它会立即打开所有9个。我想一次只打开一个。我知道在imacros你可以通过分配位置1,位置2等来解决这个问题所以它点击第一个发生的,然后是第二个,等等。有没有办法在vb.net中这样做?谢谢。
以下是点击按钮的代码
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
TextBox7.Text = TextBox7.Text + 1
theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
For Each curElement As HtmlElement In theElementCollection
If InStr(curElement.GetAttribute("value").ToString, "Visit") Then
curElement.InvokeMember("Click")
curElement.InvokeMember("MouseDown")
curElement.InvokeMember("MouseUp")
curElement.InvokeMember("OnClick")
curElement.Focus()
End If
Next
Timer2.Interval = TextBox6.Text
End Sub
这是按钮的检查元素信息:
<input class="submit" value="Visit" style="width: 110px; height: 80px; border-radius: 40px; font-size: 27;" type="submit">
答案 0 :(得分:0)
在上面的评论中,您声明:
这正是我试图做的,是为了调用其中一个点击。我不明白这是怎么可能的
嗯,问题中发布的代码是在所有匹配元素的循环中调用click
事件:
theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
For Each curElement As HtmlElement In theElementCollection
' invoke the click handler
Next
如果您只想在一个元素上调用click
事件而不是所有元素,那么请不要使用循环:
theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
If theElementCollection.Count > 0
' invoke the click handler on the first element
End If
但是,由于查询返回的所有元素都不是您要查找的元素,因此当前代码的最快方法可能是在第一个目标之后引入Exit For
语句达到了元素。像这样:
theElementCollection = WebBrowser1.Document.GetElementsByTagName("input")
For Each curElement As HtmlElement In theElementCollection
If InStr(curElement.GetAttribute("value").ToString, "Visit") Then
curElement.InvokeMember("Click")
curElement.InvokeMember("MouseDown")
curElement.InvokeMember("MouseUp")
curElement.InvokeMember("OnClick")
curElement.Focus()
Exit For ' right here
End If
Next
这样,在第一个匹配元素被点击后,循环将停止迭代&#34;。