【问题标题】:Accessing HTML buttons访问 HTML 按钮
【发布时间】:2012-06-17 07:50:49
【问题描述】:

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

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    您的最后一个按钮被点击,因为正如您所声称的,所有按钮都具有相同的值。因此,您不应该通过值来识别按钮。

    最好的解决方案是修改服务器端,使按钮具有一些属性(最好是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
    

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

    【讨论】:

    • Stack Overflow 不是交互式调试服务。
    • @ChauhdryKing - 让我们尊重版主的决定并坚持网站的 Q+A 格式。好的问题通常会非常非常快地从社区中得到好的答案。单独的问题应作为单独的独立问题输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多