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

MS Access VBA使用Selenium提取数据时报对象所需错误如何解决

VBA Selenium 爬取网页「对象所需」错误解决方案

错误触发原因

你遇到的报错核心由两个问题导致:

  • By.className 仅支持传入单个CSS类名,你代码中传入的sc-pZopv gQWHwO是两个独立类名,带空格的参数无法被正确识别,导致找不到对应元素,调用空对象的.Text属性就会触发「对象所需」错误。
  • 页面渲染的div.rt-tr-group行可能存在预留空行,内部不存在你要提取的目标元素,没有做存在性校验直接取值也会触发报错。

修正后代码

Const URL As String = "https://www.tmdn.org/tmview/#/tmview/results?page=1&pageSize=30&criteria=C&basicSearch=Bolígrafo"
Dim d As ChromeDriver
Dim elements As Selenium.WebElements
Dim element As Selenium.WebElement
Dim trade As String
Dim targetEle As Selenium.WebElement

Set d = New ChromeDriver
With d
    .Start "Chrome"
    .Get URL
    ' 显式等待列表加载完成,比固定Sleep兼容性更强
    .Wait 10000, Not .FindElementByCss("div.rt-tr-group", timeout:=10000) Is Nothing
    Set elements = .FindElementsByCss("div.rt-tr-group")
    
    For Each element In elements
        ' 捕获元素查找失败的异常
        On Error Resume Next
        ' 用CSS选择器匹配多类名,替代className方法
        Set targetEle = element.FindElementByCss(".sc-pZopv.gQWHwO", timeout:=500)
        On Error GoTo 0
        
        ' 仅当元素存在时才取值
        If Not targetEle Is Nothing Then
            trade = targetEle.Text
            ' 此处可自行添加将trade写入Access表的逻辑
            Debug.Print trade ' 立即窗口输出验证提取结果
        End If
        Set targetEle = Nothing
    Next element
End With
MsgBox "数据提取完成"
d.Quit
Set d = Nothing

补充说明

  • 如果需要提取分层的子类数据,只需要在当前element(主类行)的作用域下,用对应的CSS选择器匹配子类元素即可,逻辑和上述目标元素匹配一致。
  • 该网站的类名是前端框架自动生成的随机类,若后续爬取失效,可重新检查元素的类名是否发生变更,同步更新选择器即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:09:04