Excel VBA: как запустить проверку поля ввода на веб-странице HTML - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь использовать VBA для автоматизации ввода на веб-странице, https://www.cpf.gov.sg/eSvc/Web/Schemes/LifePayoutEstimator/LifePayoutEstimator. Я написал следующий код VBA, который заполняет различные поля ввода, в качестве примера того, чего я пытаюсь достичь.

Sub SubmitEstimatorForm()

    Dim ie As InternetExplorer
    Dim html As HTMLDocument
    Set ie = New InternetExplorer
    ie.Visible = True
    ie.navigate "https://www.cpf.gov.sg/eSvc/Web/Schemes/LifePayoutEstimator/LifePayoutEstimator"
    Do While ie.READYSTATE <> 4
        DoEvents
    Loop

    Set htmldoc = ie.document
    Set htmldisclaimercheck = htmldoc.getElementbyid("is-disclaimer-checked")
    Set htmlmaleradio = htmldoc.getElementbyid("radioMale")
    Set htmlfemaleradio = htmldoc.getElementbyid("radioFemale")
    Set htmldobfield = htmldoc.getElementbyid("DateOfBirth")
    Set htmlrabalfield = htmldoc.getElementbyid("RetirementAccountBalance_display")
    Set htmlnextbutton = htmldoc.getElementbyid("btnCalculate")

    htmldisclaimercheck.Click
    htmlmaleradio.Click
    htmldobfield.Value = "01/01/1960"
    htmlrabalfield.Value = "50000.00"
    htmlnextbutton.Click

End Sub

К сожалению, существует дополнительная проверка для поля «Текущий остаток на пенсионном счете», которая срабатывает, если я вручную ввожу тот же «50000.00» на веб-страницу, но не выполняется, когда поле заполняется программно через VBA. Отсутствие этой проверки приводит к ошибке при попытке отправить форму, т. Е. При нажатии следующей кнопки.

Error message

Я пробовал различные способы запуска проверки через FireEvents, используя onclick, onchange, onfocus и т. Д., Но до сих пор не увенчался успехом.

После некоторых исследований я считаю, что подход к решению этой проблемы, вероятно, должен заключаться в выполнении основного javascript / jquery, и нашел аналогичный вопрос в Как очистить форму, которая требует проверки пользователем поля? , однако, несмотря на многочисленные попытки использования .execScript (), я все еще не смог добиться того, что мне нужно. С чем я борюсь, так это с поиском подходящего скрипта или jquery для выполнения из-за незнакомства с javascript / jquery и проводником DOM.

Буду признателен за предложения или советы о том, как действовать, будь то с помощью вышеуказанного подхода или с помощью других альтернатив. Спасибо!

1 Ответ

0 голосов
/ 09 сентября 2018

Вы можете использовать следующее. Вам нужно focus до click.

Option Explicit
Public Sub SubmitEstimatorForm()

    Dim ie As InternetExplorer
    Dim html As HTMLDocument
    Set ie = New InternetExplorer
    ie.Visible = True
    ie.navigate "https://www.cpf.gov.sg/eSvc/Web/Schemes/LifePayoutEstimator/LifePayoutEstimator"

    While ie.Busy Or ie.readyState < 4: DoEvents: Wend

    Dim htmldoc As HTMLDocument, htmldisclaimercheck As Object, htmlmaleradio As Object
    Dim htmlfemaleradio As Object, htmldobfield As Object, htmlrabalfield As Object
    Dim htmlnextbutton As Object

    Set htmldoc = ie.document
    Set htmldisclaimercheck = htmldoc.getElementById("is-disclaimer-checked")
    Set htmlmaleradio = htmldoc.getElementById("radioMale")
    Set htmlfemaleradio = htmldoc.getElementById("radioFemale")
    Set htmldobfield = htmldoc.getElementById("DateOfBirth")
    Set htmlrabalfield = htmldoc.getElementById("RetirementAccountBalance_display")
    Set htmlnextbutton = htmldoc.getElementById("btnCalculate")

    htmldisclaimercheck.Click
    htmlmaleradio.Click

    htmldobfield.Value = "01/01/1960"

    With htmlrabalfield
        .Focus
        .Value = "50000.00"
    End With

    With htmlnextbutton
        .Focus
        .Click
    End With

    While ie.Busy Or ie.readyState < 4: DoEvents: Wend
    'other code

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...