【发布时间】:2018-04-07 03:53:13
【问题描述】:
以下代码在完成网页上的表单时工作得很好。提交表单时会出现问题。
这似乎是验证的一些问题,因为当系统完成表单时,提交按钮被禁用。但是,当我返回文本框并手动输入完全相同的信息时,提交按钮就会变为可用。我相信表单认为它不完整,因此禁用了提交按钮。我什至使用SubmitBtn.disabled = False 系统地重新启用了此按钮(允许手动或系统地单击它),但它仍然不会提交。
我在填写网页时从未遇到过这种类型的表单验证。
我目前使用的是 Internet Explorer 11
以下代码是完整的,无需修改即可测试。这是一个向公众开放的网站
Option Explicit
#If VBA7 Then
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
#Else
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If
Sub SCRA_Scrub()
' #################################################
' #### LATE BINDING IS REQUIRED ON ALL OBJECTS ####
' #################################################
Dim IE As Object
Dim sSSN As String, sLastName As String, sFirstName As String
sSSN = "123456789"
sLastName = "DOE"
sFirstName = "JOHN"
Set IE = GetIE("scra.dmdc.osd.mil") 'Already Open
If IE Is Nothing Then
Set IE = CreateObject("InternetExplorer.Application") 'Not open
With IE
.Visible = True
.Navigate ("https://scra.dmdc.osd.mil/scra/#/single-record")
End With
Else 'Reset form
Dim ClearBtn As Object
Set ClearBtn = IE.document.getElementsByClassName("btn btn-primary")(0)
End If
Sleep 400
Dim oSSN As Object, oSSN2 As Object, oLastName As Object, oFirstName As Object, SubmitBtn As Object
Dim oCaptcha As Object
Do While IE.Busy Or IE.ReadyState <> 4
DoEvents
Loop
'For some reason, page shows loaded when it's not. Will loop until obj
'becomes available
On Error Resume Next
Do Until Not oSSN Is Nothing And Not oCaptcha Is Nothing
Set oSSN = IE.document.getElementByID("ssnInput")
Set oCaptcha = IE.document.getElementByID("recaptcha_response_field")
DoEvents
Loop
On Error GoTo 0
Set oSSN2 = IE.document.getElementByID("ssnConfirmationInput")
Set oLastName = IE.document.getElementByID("lastNameInput")
Set oFirstName = IE.document.getElementByID("firstNameInput")
oSSN.InnerText = sSSN
oSSN2.InnerText = sSSN
oLastName.InnerText = sLastName
oFirstName.InnerText = sFirstName
IE.document.ParentWindow.Scroll 0&, 710&
oCaptcha.InnerText = InputBox("Security answer (Captcha)")
'IE.Document.Forms(0).submit
Set SubmitBtn = IE.document.getElementsByClassName("btn btn-primary")(1)
SubmitBtn.disabled = False '< The button was disabled, but still doesn't submit
SubmitBtn.Click
End Sub
Function GetIE(sLocation As String) As Object
Dim objShell As Object, objShellWindows As Object, o As Object
Dim sURL As String
Dim RetVal As Object
Set RetVal = Nothing
Set objShell = CreateObject("shell.application")
Set objShellWindows = objShell.Windows
For Each o In objShellWindows
sURL = ""
On Error Resume Next
sURL = o.document.Location
On Error GoTo 0
If sURL Like "*" & sLocation & "*" Then
Set RetVal = o
Exit For
End If
Next o
Set GetIE = RetVal
End Function
【问题讨论】:
-
缺少出生日期 id:
dateOfBirthInput元素? -
输入SSN时不需要。
-
我复制了你的代码,只删除了
#If VBA7 Then和PtrSafe,因为我在 VBA6.5 上运行,它对我来说很好用。提交按钮是灰色的,直到我在提示的输入框中输入验证码,一旦我按下确定,它就会提交表单。 -
感谢您的关注。但请尝试删除
SubmitBtn.disabled = False行。我刚刚在家用电脑上尝试过这个,我得到了稍微不同的结果(状态栏就像它正在加载一样 - 它不是)。在您输入删除该行的验证码后,提交按钮可能仍会显示为灰色。不管是什么原因造成的都是我的问题。那行代码实际上是用于调试目的,我仍然需要找到阻止按钮启用的根本原因 - 它仅在手动输入时启用。