2017-09-15 73 views
0

爲了標記網站中的複選框,我讓vba在ie中打開該網站。但是,即使複選框顯示爲已標記,我注意到當我讓VBA執行此操作並手動單擊自己的區別時,元素的class在單擊後更改爲「髒」而不是「原始」。如何驗證vba在網站上的操作?

如果沒有改變爲「髒......」並觸及,網站並沒有註冊實際執行的操作。所以我試圖設置「髒...」類的屬性進行檢查,但它沒有註冊執行的動作,所以我想比較「髒......」和「髒」的所有屬性, pristine ..「類,看我是否可以通過改變所需的所有表達式來使它變得更加骯髒。

因此,我手動比較了手動用戶點擊之前和之後的elemnt代碼,它位於下面的vba代碼中作爲第一條評論。

'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 

回答

0

對於那些磕磕絆絆時同樣的問題,這並獲得成功:

'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代碼中的對象類型有關。