You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VBA中使用getElementsByClassName获取多属性类的价格?

解决VBA提取多类名HTML元素价格的问题

嘿,我来帮你搞定这个价格提取的小麻烦!

你遇到的核心问题不是多类名的问题(getElementsByClassName其实支持按空格分隔写多个类名,你的写法是对的),而是你取错了属性:你用innerText拿到的是页面显示的格式化文本(也就是33<sup>€99</sup>对应的33€99),但你想要的33.99其实已经存在于元素的content属性里了!

最直接的解决方案:提取content属性

直接获取这个属性的值就能拿到现成的结构化价格,比拼接文本靠谱多了:

Dim price As String
Dim priceElement As Object

Set priceElement = html.getElementsByClassName("fpPrice price jsMainPrice jsProductPrice hideFromPro").Item(0)
price = priceElement.getAttribute("content")
' 此时price的值就是"33.99"

如果你非要从显示文本拼接(不推荐)

要是因为某些原因必须从页面显示的文本里提取,你可以把主文本和<sup>标签里的内容合并,再替换符号:

Dim price As String
Dim priceElement As Object
Dim supElement As Object

Set priceElement = html.getElementsByClassName("fpPrice price jsMainPrice jsProductPrice hideFromPro").Item(0)
Set supElement = priceElement.getElementsByTagName("sup").Item(0)

' 拼接并替换€为.
price = priceElement.innerText & Replace(supElement.innerText, "€", ".")

额外建议:加个存在性判断

为了避免页面元素不存在导致的报错,最好先检查元素集合的长度:

Dim priceElements As Object
Set priceElements = html.getElementsByClassName("fpPrice price jsMainPrice jsProductPrice hideFromPro")

If priceElements.Length > 0 Then
    price = priceElements.Item(0).getAttribute("content")
Else
    price = "未找到目标价格"
End If

内容的提问来源于stack exchange,提问作者David Morales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:22:35