Не удается получить значения из класса span с помощью VBA - PullRequest
0 голосов
/ 09 декабря 2018

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

Объект не поддерживает это свойство или метод

часть HTML

<div class="box-three box-right col-xs-20 col-lg-5 col-md-6 no-gutter">
<div class="inner-box-one">
<div class="price-container" itemprop="offerDetails" itemscope itemtype="http://data-vocabulary.org/Offer">
<span class="price-label">Τιμή:</span>
<span class="final-price"><span itemprop="price">594,00 €</span> </span>
<meta itemprop="currency" content="EUR" />
<meta itemprop="availability" content="in_stock" />
</div>

Я пытаюсь с этим:

Dim getPrice As Object
Set getPrice = ie.Doc.getElementByClassName("final-price")
Dim myValue As String: myValue = getPrice.innerText
wks.Cells(i, "C").Value = myValue

Я новичок в этом коде, поэтому, пожалуйста,

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Сколько их на странице, и это первое?Ваша ошибка в том, что вы пытаетесь использовать метод для отдельного элемента в коллекции, так как вы не использовали индекс для коллекции для извлечения одного элемента.

Вы можете вернуть nodeList всех соответствующих классовс

Dim nodeList As Object, i As Long
Set nodeList = ie.document.querySelectorAll(".final-price")

Затем получите доступ к каждому по индексу:

For i = 0 To nodeList.Length-1
    Debug.Print nodeList.item(i).innerText
Next 

"."является селектором css класса .Это предназначается для элементов их именем класса.Пространство между двумя селекторами классов представляет комбинатор потомков , указывающий, что второй класс должен быть дочерним по отношению к первому классу.

.price-container .price-label

Возможно, вы захотите объединить метки и цены:

Dim labels As Object, prices As Object, i As Long
Set labels = ie.document.querySelectorAll(".price-container .price-label")
Set prices = ie.document.querySelectorAll(".price-container .final-price")

For i = 0 To labels.Length - 1
    Debug.Print labels.item(i).innerText & " " & prices.item(i).innerText
Next

Которые, на самом деле, вы можете дополнительно объединить как:

Dim labelsPrices, i As Long
Set labelsPrices = ie.document.querySelectorAll(".price-container .price-label, .price-container .final-price")

For i = 0 To labels.Length - 1 Step 2
    Debug.Print labels.item(i).innerText & " " & prices.item(i + 1).innerText
Next

CSS-селекторыприменяются методами querySelector и querySelectorAll - в данном случае .document.Первый возвращает один элемент, т. Е. Первое совпадение, второй возвращает все совпадения.


Один элемент:

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

или

Dim label As Object, price As Object, i As Long
Set label= ie.document.querySelector(".price-container .price-label")
Set price = ie.document.querySelectorAll(".price-container .final-price")

Debug.Print label.innerText, price.innerText
0 голосов
/ 09 декабря 2018
Dim getPrice As Object
Set getPrice = ie.Doc.getElementByClassName("final-price")(0) 'While Using Class Name you must indicate an index of that class
Dim myValue As String: myValue = getPrice.innerText
wks.Cells(i, "C").Value = myValue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...