Невозможно нажать на неактивную кнопку отправки на веб-странице. - PullRequest
1 голос
/ 09 марта 2019

Я создал скрипт в vba, используя IE, чтобы заполнить несколько входов на веб-странице, чтобы заполнить определенный элемент.

Ниже приведены шаги, которые я хотел бы выполнить для моего скрипта:

  1. Выберите Buy Bricks с целевой страницы
  2. Введите возраст (35) и страну (Великобритания), а затем нажмите кнопку submit
  3. На следующей странице введите уникальный идентификационный номер для части Lego в коробке Element/design number, например 4219725

Мой скрипт может удовлетворить первые два требования (кроме нажатия на кнопку отправки). Кнопка отправки остается серой, даже когда поля ввода заполнены должным образом. После нажатия кнопки submit я хочу выполнить третье требование.

Адрес сайта

Моя попытка:

Sub GetDetails()
    Dim IE As New InternetExplorer, I As Long
    Dim Html As HTMLDocument, post As Object, ageInput As Object

    With IE
        .Visible = True
        .navigate "https://www.lego.com/en-gb/service/replacementparts"
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set Html = .document
        Html.querySelectorAll(".arrow-list-info")(2).Click

        Do: Set ageInput = Html.querySelector("input[id*='How old']"): DoEvents: Loop While ageInput Is Nothing
        ageInput.Focus
        ageInput.innerText = 30

        Do: Set post = Html.querySelector("select[ng-model='country']"): DoEvents: Loop While post Is Nothing
        For I = 0 To post.Length - 1
            If InStr(post(I).innerText, "United Kingdom") > 0 Then post(I).Selected = True: Exit For
        Next I
    End With
End Sub

Как активировать кнопку отправки, выделенную серым цветом, чтобы инициировать щелчок по ней?

1 Ответ

1 голос
/ 09 марта 2019

Добавить событие изменения к элементу выбора

Option Explicit
Public Sub GetDetails()
    Dim IE As New InternetExplorer, html As HTMLDocument, ageInput As Object

    With IE
        .Visible = True
        .Navigate2 "https://www.lego.com/en-gb/service/replacementparts"
        While .Busy Or .readyState < 4: DoEvents: Wend
        Set html = .document
        Dim event_onChange As Object
        Set event_onChange = .document.createEvent("HTMLEvents")
        event_onChange.initEvent "change", True, False
        html.querySelectorAll(".arrow-list-info")(2).Click

        Do: Set ageInput = html.querySelector("input[id*='How old']"): DoEvents: Loop While ageInput Is Nothing
        ageInput.innerText = 30
        html.querySelector("[label='United Kingdom").Selected = True
        IE.document.querySelector("select").dispatchEvent event_onChange
        IE.document.querySelector("[ng-click='startFlow()'").Click

        Do: Loop While IE.document.querySelectorAll("[ng-model=itemNumber]").Length = 0
        IE.document.querySelector("[ng-model=itemNumber]").Focus
        IE.document.querySelector("[ng-model=itemNumber]").Value = "4219725"
        Stop
    End With
End Sub
...