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

Excel VBA正常运行的金币爬取代码在Access VBA中报错求助

Access VBA中querySelector使用:last-child伪类报错的解决办法

这段爬取金币价格的代码在Excel VBA中可正常运行,但在Access VBA里执行带:last-child伪类的querySelector语句时,会返回错误-2147024809(无效参数);仅选择父元素虽能运行,却无法获取目标的最后一个span元素。

问题原因

Access VBA依赖的HTMLDocument组件基于旧版IE内核,对CSS3伪类选择器支持有限,:last-child这类伪类不在其支持范围内,因此触发无效参数错误。

解决方案

可以通过先获取父元素,再遍历其子元素定位最后一个span的方式替代伪类选择器,具体实现如下:

修改后的完整代码

Function fncScrapeGOLDvalue() As Integer
    Dim html As HTMLDocument
    Set html = New HTMLDocument
    Dim returnValue As Integer

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.allgoldcoins.co.uk/products/2013-queen-elizabeth-ii-60th-anniversary-of-the-coronation-5-gold-proof-coin?variant=41603767205941", False
        .send
        html.body.innerHTML = .responseText
    End With

    Dim parentContainer As Object
    Dim spanElements As Object
    Dim targetSpan As Object
    Dim priceText As String

    ' 获取父容器
    Set parentContainer = html.querySelector("#productPrice-product-template")
    If Not parentContainer Is Nothing Then
        ' 获取父容器下所有span元素
        Set spanElements = parentContainer.getElementsByTagName("span")
        If spanElements.Length > 0 Then
            ' 取最后一个span(索引从0开始,用Length-1定位)
            Set targetSpan = spanElements(spanElements.Length - 1)
            ' 清理价格文本,去除英镑符号和千分位逗号
            priceText = Replace(targetSpan.innerText, "£", "")
            priceText = Replace(priceText, ",", "")
            ' 先转Double处理小数,再转Integer
            fncScrapeGOLDvalue = CInt(CDbl(priceText))
        Else
            ' 未找到span时返回默认值
            fncScrapeGOLDvalue = 0
        End If
    Else
        ' 未找到父容器时返回默认值
        fncScrapeGOLDvalue = 0
    End If
End Function

额外说明

  • 原代码直接用CInt转换价格文本可能报错(比如价格带符号、千分位或小数),因此增加了文本清理和分步类型转换的步骤。
  • 如果目标span有特定类名或属性,也可直接用兼容的CSS选择器(如#productPrice-product-template span.className)定位,省去遍历操作。

内容的提问来源于stack exchange,提问作者Bill Dowton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:55:21