【问题标题】:Click on a button on webpage with VBA使用 VBA 单击网页上的按钮
【发布时间】:2021-12-16 22:01:43
【问题描述】:

我正在尝试使用 Excel VBA 单击网页上的按钮。我已经加载了页面,登录了,现在我需要点击一个按钮。问题是按钮没有 id 或名称。它只有 class 属性,每次我登录时都会略有变化。到目前为止,这是我的 VBA 代码:

Sub test()

    Dim oIE As Object
    Dim oHDoc As HTMLDocument
    
    Set oIE = CreateObject("InternetExplorer.Application")
    
    With oIE
        .Visible = True
        .navigate sSiteName
    End With
    
    While oIE.readyState <> 4
        DoEvents
    Wend
 
    Set oHDoc = oIE.document
    
    With oHDoc
        .getElementById("Ecom_User_ID").Value = "xxx"
        .getElementById("Ecom_Password").Value = "xxx"
        .getElementById("Ecom_Button_Login").Click 
    End With

End Sub

下面是我要点击的按钮的 HTML 代码

<generic-button class="user-info__btn ttu _ngcontent-jlj-3 _nghost-jlj-9" cssclass="btn-inverse">
   <button type="button" class="_ngcontent-jlj-9 btn-inverse btn btn-primary" tabindex="0">
      <p class="_ngcontent-jlj-9">New message</p>
   </button>
</generic-button>

在另一个登录时,我会得到:

<generic-button class="user-info__btn ttu _ngcontent-vnl-3 _nghost-vnl-9" cssclass="btn-inverse">
   <button type="button" class="_ngcontent-vnl-9 btn-inverse btn btn-primary" tabindex="0">
      <p class="_ngcontent-vnl-9">New message</p>
   </button>
</generic-button>

有没有办法点击按钮?任何帮助是极大的赞赏! :)

【问题讨论】:

  • 试试.getElementsByClassName("_ngcontent-jlj-9")(0).Click
  • 这不起作用,因为每次我登录网站时,“jlj”都可能是任何东西。然而,这给了我一个使用 .getElementsByTagName("button")(3).Click 的想法,因为我试图点击的按钮是使用网页上的按钮标签的第四个元素,它似乎工作!
  • 知道了,如果它是动态生成的,如果可能的话,尝试通过寻找具有 ID 的父元素来缩小搜索空间。

标签: html excel vba button


【解决方案1】:

matyd,尝试定义一个包含所有html按钮对象的对象集合,然后通过检查按钮对象的“class”属性的右30个字符是否等于“-9 btn-inverse btn btn-primary”来遍历它们":

Dim objCollection           As Object
Dim objElement              As Object

Set objCollection = oHDoc.getElementsByTagName("button")
    
    For Each objElement In objCollection
        
        If Right(objElement.Class, 30) = "-9 btn-inverse btn btn-primary" Then
            'proceed with what you want to do...
            Exit For
        End If

    Next

【讨论】:

  • 这似乎是个好主意,但是If Right(objElement.Class, 30) = "-9 btn-inverse btn btn-primary" Then 行会抛出运行时错误“438”:对象不支持此属性或方法
  • 你能得到objElement.Class的值吗?如果是这样,分配一个字符串变量并填充它?
猜你喜欢
  • 2011-01-23
  • 2016-03-13
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
相关资源
最近更新 更多