【问题标题】:How to validate action on website by vba?如何通过 vba 验证网站上的操作?
【发布时间】:2017-09-23 13:48:47
【问题描述】:

为了在网站中标记复选框,我让 vba 在 ie 中打开该网站。然而,即使复选框显示为已标记,我注意到当我让 VBA 执行此操作和手动单击我自己之间的区别是元素的 class 更改为“dirty..”而不是“pristine..”之后点击。

如果没有更改为“脏..”并触摸,则网站不会将操作注册为实际执行的操作。

所以我尝试将“dirty...”类的属性设置为选中,但它没有将操作注册为已执行,所以我想比较“dirty..”和“pristine”的所有属性.." 类,看看我是否可以通过更改使其变脏所需的所有表达式来使其注册所执行的操作。

因此,我对手动用户点击前后的元素代码进行了手动比较,它位于下面的vba代码中,作为第一个cmets。

'Difference in html element code between vba clicking the checkbox and an actual user clicking the checkbox:
'<form name="forms.addressContract" class="form __hor ng-pristine ng-scope ng-invalid ng-invalid-required ng-valid-pattern ng-valid-maxlength" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
'<form name="forms.addressContract" class="form __hor ng-scope ng-invalid ng-invalid-required ng-valid-pattern ng-valid-maxlength ng-dirty ng-valid-parse" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
'<input class="ng-pristine ng-valid ng-touched" id="permission" type="checkbox" ng-model="permission.checked">
'<input class="ng-valid ng-touched ng-dirty ng-valid-parse" id="permission" type="checkbox" ng-model="permission.checked">

Set elements1a = ie.document.getElementsByClassName("ng-valid ng-touched ng-dirty ng-valid-parse")
MsgBox (elementa1a)
For Each Item In elements1a
    If elements1a.Item.Checked = False Then
        elements1a.Item.Click
        If elements1a.Item.Checked = True Then
            MsgBox ("clicking the checkbox switched the checked-ness of the item to true")
        End If
    End If
    If elements1a.Item.complete = False Then
        elements1a.Item.Click
        If elements1a.Item.complete = True Then
            MsgBox ("clicking the checkbox switched the completeness of the item to true")
        End If
    End If
    MsgBox (elements1a.Item.className & " and " & elements1a.Item.Checked)
    If elements1a.Item.className = "ng-valid ng-touched ng-dirty ng-valid-parse" Then
        elements1a.Item.Checked = True
        MsgBox (elements1a.Item.Checked)
        'Element code when vba clicks the button:
        '<form name="forms.addressContract" class="form __hor ng-scope ng-valid-maxlength ng-valid-pattern ng-invalid ng-invalid-required ng-valid-parse ng-pristine" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
        'Element code when an actual user actually clicks the button
        '<form name="forms.addressContract" class="form __hor ng-scope ng-valid-maxlength ng-valid-pattern ng-invalid ng-invalid-required ng-valid-parse ng-dirty" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
    End If
Next

'the vba command for the not user-clicked checkbox
Set elements1b = ie.document.getElementsByClassName("ng-pristine ng-valid ng-touched")
    MsgBox (element1b)
    For Each Item In elements1b
        If elements1b.Item.className = "ng-pristine ng-valid ng-touched" Then
            elements1b.Item.Checked = True
            MsgBox (elements1b.Item.Checked)
            '<form name="forms.addressContract" class="form __hor ng-scope ng-valid-maxlength ng-valid-pattern ng-invalid ng-invalid-required ng-valid-parse ng-pristine" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">
            '<form name="forms.addressContract" class="form __hor ng-scope ng-valid-maxlength ng-valid-pattern ng-invalid ng-invalid-required ng-valid-parse ng-dirty" novalidate="" ng-class="{'force-show-errors': isSubmitted}" ng-submit="submitAddress()">

        End If
    Next

【问题讨论】:

    标签: html vba validation internet-explorer


    【解决方案1】:

    对于那些偶然发现同样问题的人来说,这是成功的:

    '1. Mark checkbox
        'MsgBox ("engage filling")
        Set elements1e = ie.document.getElementById("permission")
        'MsgBox (elements1e.Name & " " & elements1e.className & elements1e.placeholder)
        elements1e.Focus
        elements1e.Click
    '    MsgBox ("cLICKED")
    

    我不确定为什么可以在此元素上使用 .focus.click 而不能在其他元素上使用。我认为这与它在网站本身的 html 代码中的对象类型有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多