Импортировать исходный веб-код, в том числе не отображаемый на странице - PullRequest
0 голосов
/ 11 июля 2020

Я хочу импортировать исходный код веб-страницы в excel, что я вижу, используя параметр View Page Source в Chrome. Но когда я импортирую его, используя приведенный ниже код, он импортирует не весь контент. Значения, которые я ищу, не отображаются на веб-странице. Я также не могу найти элемент, используя getElementsByClassName или другие методы.

Private Sub HTML_VBA_Excel()
Dim oXMLHTTP As Object
Dim sPageHTML As String
Dim sURL As String

'Change the URL before executing the code
sURL = "http://pntaconline/getPrDetails?entry=8923060"

'Extract data from website to Excel using VBA
Set oXMLHTTP = CreateObject("MSXML2.ServerXMLHTTP")
oXMLHTTP.Open "GET", sURL, False
oXMLHTTP.send
sPageHTML = oXMLHTTP.responseText

'Get webpage data into Excel
' If longer sourcecode mean, you need to save to a external text file or somewhere,
' since excel cell have some limits on storing max characters

ThisWorkbook.Sheets(1).Cells(1, 1) = sPageHTML

MsgBox "XMLHTML Fetch Completed"

End Sub

Данные, которые я хочу импортировать, - это идентификаторы и имя: введите описание изображения здесь

1 Ответ

1 голос
/ 11 июля 2020

Итак, вам нужно понять DOM, чтобы понять, почему он загружает не все.

XMLHTTP будет загружать этот ресурс, который вы запрашивали. Многие веб-страницы, извините, почти все веб-страницы, загружают дополнительные ресурсы после выполнения первоначального запроса.

Если вам что-то не хватает, вероятно, он загружен по другому сетевому запросу. Итак, откройте свои DevTools в Chrome, убедитесь, что вкладка «Сеть» записывается, и посмотрите, сколько сетевых запросов go входит и отправляется, когда вы загружаете свою целевую страницу.

По сути, это, если вы используете XMLHTTP, вам нужно будет смоделировать каждый из них, чтобы получить запросы, которые вы хотите очистить.

EDIT

Итак, вы просто вставляете ответ данных в Excel.

Лучше создать переменную HTMLDocument, а затем установить ответ от XMLHTTP как ответ, как здесь: https://docs.microsoft.com/en-us/previous-versions/windows/desktop/ms762275 (v = vs.85)

set xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/books.xml", false);
xmlhttp.send();
Debug.print(xmlhttp.responseText);
Dim xString as String
xSring = xmlhttp.responseText
'search the xString variable

Затем вы можете разделить этот ответ для листа или выполнить поиск в нем и извлечь значения в памяти VBA, а не печатать на лист.

Вы также можете установить xString responseText как внутренний HTML для новая переменная HTMLDocument

Dim xHTML as HTMLDocument
Set xHTML.innertext = xString
...