Как получить название продукта с веб-страницы, используя VBA? - PullRequest
0 голосов
/ 05 ноября 2018

Теперь я могу искать в Google и получать разные ссылки на разные PDP (страницы с описанием товара), и я хочу просмотреть названия продуктов на этих страницах. Однако у меня возникли проблемы с пониманием, как именно понять HTML-код названия продукта.

Ниже мой код:

Sub testing()


Dim ie As New SHDocVw.InternetExplorer
Dim x As Integer
Dim x1 As Integer
Dim i As Integer
Dim i1 As Integer
Dim Product_Title As String
Dim HTMLDoc As MSHTML.HTMLDocument
Dim htmlinput As MSHTML.IHTMLElement



ie.Navigate "https://www.johnlewis.com/asus-zenbook-ux331un-eg009t-laptop-intel- core-i5-8gb-256gb-ssd-geforce-mx150-13-3-royal-blue/p3405316"

ie.Visible = True

While ie.Busy Or ie.ReadyState < 4: DoEvents: Wend


  Product_Title = ie.document.getElementsByClassName("product-header__title")


   Debug.Print (Product_Title)

Но я получаю [объект HTMLHeadingElement] в качестве вывода вместо названия продукта

вот HTML-код:

<h1 class="product-header__title" itemprop="name">ASUS ZenBook S UX391UA-ET087T Laptop, Intel Core i7, 8GB RAM, 256GB SSD, 13.3”, Full HD, Burgundy</h1>

1 Ответ

0 голосов
/ 05 ноября 2018

Требуется свойство .innerText и индексирование в коллекцию, возвращаемую при сопоставлении по имени класса.

ie.document.getElementsByClassName("product-header__title")(0).innerText

Как и первый с этим именем класса, вы также можете использовать:

ie.document.querySelector(".product-header__title").innerText

. - это селектор класса CSS и querySelector, который применяет это к документу DOM и возвращает первое совпадение.

Обратите внимание, что поскольку коллекция возвращается с вашим синтаксисом, вам потребуется:

Dim Product_Title As Object
Set Product_Title = ie.document.getElementsByClassName("product-header__title")

Затем индексировать с помощью Product_Title(0).innerText. Я не поклонник подчеркиваний в именах локальных переменных, поэтому я бы просто использовал productTitle; также обратите внимание на изменение корпуса.


Если вы только после заголовка, было бы быстрее выдать XMLHTTP запрос , чем открывать экземпляр браузера IE:

Option Explicit
Public Sub GetTitle()
    Dim sResponse As String, html As HTMLDocument
    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.johnlewis.com/asus-zenbook-ux331un-eg009t-laptop-intel-%20core-i5-8gb-256gb-ssd-geforce-mx150-13-3-royal-blue/p3405316", False
        .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
        .send
        sResponse = StrConv(.responseBody, vbUnicode)
    End With

    Set html = New HTMLDocument
    With html
        .body.innerHTML = sResponse
        Debug.Print .querySelector(".product-header__title").innerText
    End With
End Sub

Ссылки (VBE> Инструменты> Ссылки):

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