访问HTML按钮

时间:2012-06-17 07:50:49

标签: vb.net

网站上有17个HTML按钮。这些按钮没有ID,并且具有相同的名称,类型和值。我想通过使用vb.net 2008 webbrowser控件以编程方式单击按钮。我写这段代码时

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        WebBrowser1.Navigate("website bla bla")
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted

        Dim allelements As HtmlElementCollection = WebBrowser1.Document.All

        For Each webpageelement As HtmlElement In allelements

            If webpageelement.GetAttribute("value") =  "Start" Then

                webpageelement.InvokeMember("click")

            End If

        Next

    End Sub
End Class

然后每次我的程序点击第17个按钮。我想单独点击第一个按钮,第二个按钮,第三个按钮,依次单击下一个按钮。那么请你指导我如何单独点击每个按钮。这是按钮的HTML代码。

1 个答案:

答案 0 :(得分:0)

点击您的最后一个按钮,因为您声明所有按钮都具有相同的值。因此,您不应该按值识别按钮。

最好的解决方案是修改服务器端,使按钮具有一些属性(理想情况下为id),以便以编程方式轻松区分它们。 (例如,如果您正在为同事开发的网站编写测试工具,这将适用。请与他们交谈,并将您的请求称为“可测试性”。)

但是,如果您必须按原样使用网站,则会有一些信息使每个按钮都是唯一的,这就是它的连续索引。

Dim i As Integer
Dim allButtons As HtmlElementCollection

allButtons = WebBrowser1.Document.getElementsByTagName('input');

i = 0
For Each webpageelement As HtmlElement In allButtons
    i += 1
    If i = 7 Then
        webpageelement.InvokeMember("click")
    End If
Next

这将点击第七个按钮。这种方法的缺点是,每次网站布局稍有变化时,您的客户端代码都会严重崩溃,导致各种混乱和乏味,然后才能修复。您可以通过使用符号名称表示这些固定索引值并将任何顺序索引仅与这些索引进行比较来部分对抗,但它仍然是一种易于重用的脆弱技术。