如何在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
相关产品推荐
相关产品推荐

