Access VBA Selenium爬虫:NoSuchElementError捕获失效及匹配优化
解决方案:通过检查结果表格存在性替代错误捕获逻辑
核心思路
不再依赖捕获Err.Number=7(元素未找到错误),而是直接使用FindElementsByXPath(复数形式)获取目标结果表格的元素集合。该方法在元素不存在时不会抛出错误,仅返回空集合,通过判断集合数量是否大于0即可确定是否匹配成功。
修改后的代码实现
将原报错的代码行替换为以下逻辑:
Dim eleCollection As Selenium.WebElements Set eleCollection = WD.FindElementsByXPath("//*[@id='eligibility']/div[2]/table[3]/tbody/tr[3]/td/table/tbody/tr[2]/td[2]") If eleCollection.Count > 0 Then ' 匹配成功:读取MBI数据并写回Access Dim mbiValue As String mbiValue = eleCollection(1).Text ' Selenium集合索引从1开始 ' 此处添加写回Access字段的代码 Else ' 无匹配:标记当前记录并跳转至下一条 ' 此处添加标记无匹配的逻辑(如更新Access对应字段) ' 执行跳转至下一条记录的代码 End If
关键说明
FindElementsByXPath返回WebElements集合,无论元素是否存在都不会触发运行时错误,彻底解决原错误捕获逻辑仅首次生效的问题。- 需确保使用的XPath严格对应成功匹配时显示的结果表格元素,避免因页面结构微调导致判断失效。
- 若需进一步验证表格内是否包含有效数据,可在
Count>0的分支中额外检查元素文本内容是否为空。
整体代码调整建议
移除原有的On Error Resume Next或On Error GoTo错误处理块,替换为上述集合判断逻辑,确保流程稳定且无需依赖错误捕获机制。
内容的提问来源于stack exchange,提问作者Joseph Dowski
相关产品推荐
相关产品推荐

