我正在尝试使用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
我是这种代码的新手,所以请
答案 0 :(得分:0)
Event Queue
答案 1 :(得分:0)
页面上有多少个,它是第一个吗?您的错误是因为您试图对集合中的单个元素使用一种方法,因为您没有使用集合中的索引来检索单个项目。
您可以通过以下方式返回所有匹配类的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
“。”是class css selector。它通过元素的类名来定位元素。两个类选择器之间的空格表示descendant combinator,表示第二个类必须是第一类的子代。
.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