.GetElementsByName.SelectedIndex заметно меняет опцию, но не программно? - PullRequest
1 голос
/ 13 июня 2019

Итак, у меня возникла проблема, и я не знаю, как ее решить. В Excel VBA у меня есть этот код, который ведет меня через веб-сайт (https://indexcalculator.ftserussell.com/), однако на шаге 3 сайта, когда я изменяю выбранный Индексы через VBA Я вижу, что они меняются на веб-странице, но когда нажимается кнопка следующей страницы, это как если бы она никогда не нажималась.

Изменение выбранных индексов:

enter image description here

После получения возврата нажмите:

enter image description here

    months = Format(DateSerial(year(Date), month(Date) - 1, 1), "m")
    days = Format(DateSerial(year(Date), month(Date), 0), "d")
    years = CInt(Format(DateSerial(year(Date), month(Date) - 1, 1), "yyyy")) - 1994

    Application.Wait (Now + TimeValue("0:00:01"))

    'If the year pops up blank that means that the base year is no longer 1994
    HTMLdoc.getElementsByName("m_startDate")(0).selectedIndex = CInt(months - 1)
    HTMLdoc.getElementsByName("d_startDate")(0).selectedIndex = CInt(days - 1)
    HTMLdoc.getElementsByName("y_startDate")(0).selectedIndex = years
    Application.Wait (Now + TimeValue("0:00:02"))

    Set oButton = HTMLdoc.querySelector("a[href='javascript:submitForm(document.forms[0].action);']")
    oButton.Click

    Application.Wait (Now + TimeValue("0:00:01"))

    Set oButton = HTMLdoc.querySelector("a[href='javascript:document.forms[0].target='_blank';submitForm('IndexDownload.aspx');']")
    oButton.Click

Страница шага 4 должна была сказать 31 мая, а не 13 июня. Когда я делаю это вручную, это работает. Кто-нибудь знает, почему это происходит?

1 Ответ

1 голос
/ 14 июня 2019

Кажется, что следующее работает нормально.Настройте селекторы CSS на значения, которые вы хотите выбрать для конечных дат.В частности, посмотрите на селекторы css attribute = value , которые я часто использую ниже.

Option Explicit

Public Sub test()
    Dim ie As Object, days As Long, months As Long, years As Long
    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate2 "https://indexcalculator.ftserussell.com/"

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

        months = Format(DateSerial(Year(Date), Month(Date) - 1, 1), "m")
        days = Format(DateSerial(Year(Date), Month(Date), 0), "d")
        years = 1994


        With .document
            .querySelector("[value='irs3']").Click 'step 1
            .querySelector("#Ctlnavigation2_lblControl [href*=action]").Click

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

            .querySelector("#rdoSpDtRng").Click 'step 2
            .querySelector("#Ctlnavigation2_lblControl [href*=action]").Click

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

            .querySelector("[value='" & months & "']").Selected = True 'step 3
            .querySelector("[value='" & days & "']").Selected = True
            .querySelector("[value='" & years & "']").Selected = True
            .querySelector("[name='m_endDate'] [value='" & months + 1 & "']").Selected = True
            .querySelector("[name='d_endDate'] [value='" & days - 1 & "']").Selected = True
            .querySelector("[name='y_endDate'] [value='" & years + 1 & "']").Selected = True
            .querySelector("#Ctlnavigation2_lblControl [href*=action]").Click
            While ie.Busy Or ie.readyState < 4: DoEvents: Wend

        End With
        Stop                                     '<delete me later
        .Quit
    End With
End Sub
...