Ошибка VBA "91" (переменные объекта не установлены) при попытке вывести внутренний текст HTML-элемента - PullRequest
1 голос
/ 12 марта 2019

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

это мой код:

Sub macro()
Dim IE As New SHDocVw.InternetExplorer
Dim html As New MSHTML.HTMLDocument
Dim web As String
Dim sale1 As Variant, a As String

web = "https://www.vndirect.com.vn/portal/bao-cao-ket-qua-kinh-doanh/vto.shtml"
IE.Visible = False
IE.navigate web

Do While IE.readyState <> READYSTATE_COMPLETE
Loop

Set html = IE.document
Set sale1 = html.getElementsByClassName("incomestatement_right_1").Item(0)
    MsgBox sale1.innerText
'when i try to put the code below into work it occurred error'
    Range("Q2") = sale1.innerText
Set IE = Nothing

End Sub

1 Ответ

0 голосов
/ 18 марта 2019

Ваша проблема здесь в том, что вы используете IE для запроса простого HTML-файла, который веб-сервер доставляет вашему браузеру. Это эквивалент перехода на страницу и просмотра исходного кода.

Это, однако, не учитывает какие-либо манипуляции с DOM, которые имели место, например, с использованием JavaScript. Вот почему inspect element отличается от view source.

В данном конкретном случае интересующий вас HTML-элемент:

<table id="Listed_IncomeStatement_tableResult"></table>

заполняется сценарием, и его содержимое не отображается в исходном коде страницы.

Таким образом, в основном ваш код получает код HTML, но тело таблицы пустое, что означает, что ваш sale1 также пуст, потому что искомый элемент не был найден.

Что вам нужно сделать, это научиться работать с HTTP-запросами вместо IE. Вы будете делать себе одолжение.

Зайдите на сайт, проверьте сетевой трафик, когда вы нажмете эту оранжевую кнопку «просмотр» ... view button

... и вы увидите, что все, что вам нужно, это HTTP-запрос "POST", который возвращает JSON-ответ, содержащий все необходимые вам данные.

enter image description here

enter image description here

Поиск, как работать с HTTP-запросами, и использовать информацию из вашего браузера для репликации:

enter image description here

Наконец, вам нужно найти способ синтаксического анализа ответа JSON с помощью vba, и все будет готово.

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