0

一个网站上有 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 代码。

4

1 回答 1

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

这将单击第七个按钮。这种方法的缺点是,每次网站的布局稍有变化,你的客户端代码就会严重崩溃,在修复之前造成各种混乱和乏味。您可以通过用符号名称表示这些固定索引值并将任何顺序索引仅与这些索引进行比较来部分解决这个问题,但它仍然是一种难以重用的脆弱技术。

于 2012-06-17T21:28:48.560 回答