Как мне заставить VBA отправить форму javascript? - PullRequest
2 голосов
/ 13 июня 2019

Я не уверен, правильно ли я ссылаюсь на кнопку.Я продолжаю получать:

Ошибка времени выполнения '438': объект не поддерживает это свойство или метод.

Вот так выглядит мой код на данный момент:

Sub russInd()
    Dim oButton As Object, HTMLdoc As Object
    Dim sht1 As Worksheet, myURL As String
    Set ie = CreateObject("InternetExplorer.Application")
        Set sht1 = Worksheets("Day 1")
        myURL = sht1.Cells(32, 2).Value
        ie.navigate myURL
        ie.Visible = True

        Do Until ie.ReadyState = 4
            DoEvents
        Loop

        'Locate The correct forms and buttons
        Set HTMLdoc = ie.document
        Set oButton = HTMLdoc.querySelectorAll("a[href='javascript:submitForm(document.forms[0].action);']")
        'Check All Checkboxes
        HTMLdoc.getElementByID("chkAll").Click
        oButton.Click
End Sub

Я использую веб-страницу:

  https://indexcalculator.ftserussell.com/

Вот код веб-страницы:

Web Page Code

Мне нужно нажать следующую кнопку, я попытался использовать

.getElementByID("CtlNavigation_lblControl")

Длянажмите кнопку, однако, что только что пропустил команду, я думаю, что ничего не щелкнуло.Спасибо!

Ответы [ 3 ]

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

querySelectorAll возвращает список узлов . Вы, вероятно, хотите querySelector

Попробуйте

HTMLdoc.getElementById("CtlNavigation_lblControl").querySelector("a").Click

или

HTMLdoc.querySelector("CtlNavigation_lblControl a").Click
1 голос
/ 14 июня 2019

Используйте следующий селектор, так как он работает на всех этапах. Количество дочерних a элементов в родительском элементе с идентификатором Ctlnavigation2_lblControl изменяется, поэтому следующий способ - это надежный способ всегда получать то, что вы хотите, на страницах.

HTMLdoc.querySelector("#Ctlnavigation2_lblControl [href*=action]").Click

Ваша ошибка, частично исправленная в комментариях, заключается в том, что вы пытаетесь использовать метод определенных типов узлов, например, a элемент тега в nodeList (это то, что возвращает querySelectorAll). Это НЕ возвращает коллекцию. Это очень важное различие в VBA. Если вы попытаетесь использовать For Each, как и в случае с коллекцией, поверх этого списка узлов Excel будет аварийно завершать работу.

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

Установите свой селектор на это: (он говорит, что ищите любое изображение в родительском A элементе.)

Set oButton = HTMLdoc.querySelectorAll("a > img")

Вот полный код с модификацией:

Sub russInd()
    Dim oButton As Object, HTMLdoc As Object
    Dim sht1 As Worksheet, myURL As String
    Set ie = CreateObject("InternetExplorer.Application")
        Set sht1 = Worksheets("Day 1")
        myURL = sht1.Cells(32, 2).Value
        ie.navigate myURL
        ie.Visible = True

        Do Until ie.ReadyState = 4
            DoEvents
        Loop

        'Locate The correct forms and buttons
        Set HTMLdoc = ie.document
        Set oButton = HTMLdoc.querySelectorAll("a > img")
        'Check All Checkboxes
        HTMLdoc.getElementByID("chkAll").Click
        oButton.Click
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...