Excel VBA IE Метод NAVIGATE не возвращает полный HTML Страница - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь извлечь имя актера из URL-адреса, который я передаю, для моего URL мне нужно удалить «Will Smith» со страницы HTML. Веб-страница

Я знаю, как извлечь элементы со страницы HTML, используя теги, classnaem et c.

Но проблема, с которой я сталкиваюсь, - это когда я прохожу URL "https://ssl.ofdb.de/film/138627, I-Am-Legend " в тексте ответа, я не получаю полную страницу HTML, из-за этого я не могу извлечь содержимое "Уилл Смит ".

Я пробовал другие методы, такие как MSXML2.XMLHTTP60, и оба возвращают только частичную HTML страницу

Я приложил свой код здесь, любой, пожалуйста, помогите

Sub Fetch_Info()

Dim ie As New InternetExplorer
Set ie = CreateObject("InternetExplorer.Application")


ie.Visible = True
ie.Top = 0
ie.Left = 700
ie.Width = 1000
ie.Height = 750
ie.AddressBar = 0
ie.StatusBar = 0
ie.Toolbar = 0
ie.navigate "https://ssl.ofdb.de/film/138627,I-Am-Legend"

Do
DoEvents
Loop Until ie.readyState = READYSTATE_COMPLETE

Application.Wait Now + TimeValue("00:00:04")

Dim doc As HTMLDocument
Set doc = ie.document
doc.Focus


Debug.Print doc.DocumentElement.innerHTML

End Sub

1 Ответ

1 голос
/ 19 апреля 2020

Вы можете использовать следующий селектор css. querySelector возвращает первый узел, соответствующий шаблону css. Шаблон [itemprop='actor'] span, который ищет дочерний элемент span с родительским элементом, имеющим атрибут itemprop со значением actor. Обратите внимание, я работаю с узлом ie.document.

Debug.Print ie.document.querySelector("[itemprop=actor] span").innerText

Этот контент имеет статус c, поэтому вы можете использовать xhr и избежать накладных расходов браузера. Кодировка заголовка ответа - нет, поэтому вам нужно тело ответа.

Option Explicit

Public Sub GetActor()
    Dim xhr As MSXML2.XMLHTTP60, html As MSHTML.HTMLDocument
    'required VBE (Alt+F11) > Tools > References > Microsoft HTML Object Library ;  Microsoft XML, v6 (your version may vary)

    Set xhr = New MSXML2.XMLHTTP60
    Set html = New MSHTML.HTMLDocument

    With xhr
        .Open "GET", "https://ssl.ofdb.de/film/138627,I-Am-Legend", False
        .send
         html.body.innerHTML = StrConv(.responseBody, vbUnicode)
    End With

    ActiveSheet.Cells(1, 1) = html.querySelector("[itemprop=actor] span").innerText
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...