当Excel VBA说它不可见但实际上是可见时,是否可以单击单选按钮?

问题描述 投票:0回答:1

如何在表单中单击网页上的单选按钮?我正在尝试编写代码以自动使用Excel VBA填充表单。这是问题陈述:需要单击页面https://moverguide.usps.com/mgo/disclaime r或https://moversguide.usps.com/mgo-m/disclaimer上的三个选项之一,即“个人”,“家庭”和“业务”,出现以下错误:

运行时错误11:NoSuchElementErrorElement无法单击元素

当我使用此示例代码时:

If var = individual or family or business Then
        If obj.FindElementById("move-type-var").IsPresent Then
            obj.FindElementById("move-type-var").Click
        End If

或此错误:

运行时错误7

NoSuchElementError

当我运行以下示例代码时:

if condition satisfied then
                obj.FindElementByCss ("css=.row--reskin:nth-child(1) .reskin__card:nth-child(1) > .reskin__card--label)")

            End If

我通过从Firefox中提取css目标获得了css参数。基本上,我使用Selenium IDE记录了一个脚本,以查看发生了什么,以便为Excel VBA解决方案利用适当的目标值。

当我手动检查源代码时,IE控制台(F12)中的属性之一被“ aria-checked”设置为“ checked / true”。当我自己单击其中一个选项时,就会发生这种情况。那是我必须在代码中启用的功能吗?

仅免责声明:总体上对Excel VBA很好,但在探索Web表单方面又是一个相当新的方面。

工具:IE11的Selenium Webdriver,MS Excel(办公室365),VBA

excel vba selenium-webdriver internet-explorer-11 usps
1个回答
0
投票

它们是标签,不是单选按钮。您可以使用CSS属性=值选择器作为目标;在此将感兴趣的选项字符串连接到for属性值中。我使用略有不同的起始网址,以避免不必要的步骤。我使用定时循环来确保该元素存在(如果超时不存在该元素,则程序退出)。

Public Sub ClickAnOption()

    Dim ie As SHDocVw.InternetExplorer, var As String

    'individual, family, business
    var = "business"

    Set ie = New SHDocVw.InternetExplorer

    With ie
        .Visible = True
        .Navigate2 "https://moversguide.usps.com/mgo-m/move-combined"

        Do: DoEvents: Loop While .readyState <> READYSTATE_COMPLETE Or .Busy

        Dim t As Date
        Const MAX_WAIT_SEC As Long = 5

        t = Timer
        Do
            DoEvents
            If Timer - t > MAX_WAIT_SEC Then Exit Sub
        Loop While .document.querySelectorAll("[for='move-type-" & var & "']").Length = 0

        .document.querySelector("[for='move-type-" & var & "']").Click

        Stop

        .Quit

    End With
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.