Ошибка ошибки синтаксиса в VBA

Я пытаюсь извлечь некоторые значения с помощью VBA с веб-сайта

Следующий код содержит массив данных, которые я ищу. Это отлично работает и дает мне массив данных, которые я ищу.

document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")

Результат для вышеизложенного

<NodeList length="23">...</NodeList>

Но когда я пытаюсь извлечь значения, запустив цикл в VBA, используя следующий код

lnth = document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']").Length - 1

For x = 0 To lnth

    firstResult = document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")(x).innerText

Next x

Код будет давать ошибку на firstResult, так как он не получит никакого значения. Я проверил в Internet Explorer, нет значения, если я использую "(" скобки, однако, если я использую "[" в Internet Explorer он работает, но VBA не принимает "[" Скобки.

document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")[0] 

Код выше работает на консоли Internet Explorer, но не может использоваться в VBA.

Я уверен, что мне не хватает чего-то, что могло бы помочь, если вы можете посоветовать, каково обходное решение для этого.

введите описание изображения здесь

Ответ 1

Чтобы получить innerText, вы можете использовать getElementsByClassName еще 2 раза, один из них внутри цикла for each .. next, так как ваши значения находятся в list-flights -> price -> cash js_linkInsideCell:

Set priceData = IE.document.getElementsByClassName("list-flights")(0).getElementsByClassName("price")

For Each Item In priceData
    Debug.Print Item.getElementsByClassName("cash js_linkInsideCell")(0).innerHTML
Next Item

Использование .querySelectorAll("[class$='price']") также работает, но после разбора он отключает объект IE. Попробуйте посмотреть, сбой:

Set priceData = IE.document.getElementsByClassName("list-flights")(0).querySelectorAll("[class$='price']")

For Each Item In priceData
    Debug.Print Item.getElementsByClassName("cash js_linkInsideCell")(0).innerHTML
Next Item

Некоторые быстрые заметки:

1-Вы можете использовать этот код, чтобы ждать, пока IE-объект загрузит URL-адрес:

Do While IE.Busy
    DoEvents
Loop

2 - Иногда, даже если объект IE готов, результаты запроса не возвращаются так быстро. Это означает, что элементы, которые вы ищете, еще не готовы и не существуют, поэтому вы получаете сообщение об ошибке:

Ошибка времени выполнения '91': переменная объекта или с заблокированной переменной блока

Чтобы избежать этого сообщения, мое обходное решение выглядит следующим образом:

Do
On Error Resume Next
Set priceData = IE.document.getElementsByClassName("list-flights")(0).getElementsByClassName("price")
Loop Until Err.Number <> 91

Надеюсь, это поможет.