【问题标题】:HTML Form Will Not Submit, Likely Form Validation IssuesHTML 表单不会提交,可能是表单验证问题
【发布时间】: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 ThenPtrSafe,因为我在 VBA6.5 上运行,它对我来说很好用。提交按钮是灰色的,直到我在提示的输入框中输入验证码,一旦我按下确定,它就会提交表单。
  • 感谢您的关注。但请尝试删除SubmitBtn.disabled = False 行。我刚刚在家用电脑上尝试过这个,我得到了稍微不同的结果(状态栏就像它正在加载一样 - 它不是)。在您输入删除该行的验证码后,提交按钮可能仍会显示为灰色。不管是什么原因造成的都是我的问题。那行代码实际上是用于调试目的,我仍然需要找到阻止按钮启用的根本原因 - 它仅在手动输入时启用。

标签: html vba forms excel


【解决方案1】:

感谢some assistance,在此特定表单上,在为每个输入对象设置文本之前,我似乎需要使用object.setActive

所以代码结束如下:

oSSN.setActive
oSSN.InnerText = sSSN
oSSN2.setActive
oSSN2.InnerText = sSSN
oLastName.setActive
oLastName.InnerText = sLastName
oFirstName.setActive
oFirstName.InnerText = sFirstName
IE.document.ParentWindow.Scroll 0&, 710&
oCaptcha.setActive
oCaptcha.InnerText = InputBox("Security answer (Captcha)")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多