VBA填写网页表单报91错误,如何多属性匹配定位HTML元素?
多属性定位HTML元素的实现方法
方法1:使用querySelector(推荐,代码最简洁)
HTMLDocument对象支持原生CSS选择器查询,你可以直接把需要匹配的多个属性条件拼接成选择器字符串,一次性定位到符合所有条件的元素:
Dim targetEl As HTMLInputElement ' 拼接四个属性的匹配条件 Set targetEl = oHDoc.querySelector("input[id='ComboBoxField_TS0003'][group-id='TS1'][data-link-id='2TS'][data-box-id='73']") If Not targetEl Is Nothing Then targetEl.Value = "ZX9" ' 可选补充:该元素是Kendo Combobox的隐藏绑定字段,赋值后可触发变更事件同步组件状态 Call targetEl.FireEvent("onchange") Else MsgBox "未找到匹配的目标元素" End If
选择器的语法规则为[属性名='属性值'],多个条件并列即代表需要同时满足所有属性匹配要求。
方法2:遍历元素手动校验属性(兼容旧版IE)
如果你的运行环境是IE8及更低版本,不支持querySelector,可以先筛选同标签、同id的元素,再逐一校验其他自定义属性:
Dim allEls As IHTMLElementCollection Dim el As HTMLInputElement Dim targetEl As HTMLInputElement Set allEls = oHDoc.getElementsByTagName("input") For Each el In allEls If el.ID = "ComboBoxField_TS0003" Then ' 校验剩余三个自定义属性 If el.getAttribute("group-id") = "TS1" And _ el.getAttribute("data-link-id") = "2TS" And _ el.getAttribute("data-box-id") = "73" Then Set targetEl = el Exit For End If End If Next If Not targetEl Is Nothing Then targetEl.Value = "ZX9" Else MsgBox "未找到匹配的目标元素" End If
额外注意事项
你提供的元素代码中style属性带有display: none,这是Kendo UI Combobox组件的隐藏值绑定字段,直接修改它的值后,页面上的可见输入框可能不会同步更新,提交时如果需要触发组件内置校验,建议修改完值后主动触发onchange事件,或者找到对应的可见输入框赋值。
另外你当前的页面加载判断仅校验了ReadyState = 4,如果页面是动态渲染的(比如组件由JS异步加载),可能出现IE就绪但元素还未渲染的情况,可补充最长3秒的超时等待逻辑,避免程序一直卡死循环。
内容的提问来源于stack exchange,提问作者Stuart Graham
相关产品推荐
相关产品推荐

