VBA Selenium遍历单选按钮获取选中值并打印的实现方法
问题修复方案
核心错误原因
- VBA Selenium的
Attribute()方法直接返回属性结果,不需要追加.Value调用,你原有写法属于语法错误,加上On Error Resume Next屏蔽了报错,导致判断逻辑永远无法触发 - checked是HTML布尔属性,实际返回值可能是布尔值
True,也可能是字符串checked,仅判断等于字符串"checked"会出现匹配失败的情况 - 你提供的HTML片段存在语法错误,Orange对应的单选框不在
<tr>节点内,遍历<tr>下的input元素会漏掉该选项,若实际网页结构也是如此需要额外处理
修正后可运行代码
Chrome.Wait 100 Set seconds = Chrome.FindElementsByTag("tr") j = 2 s = 2 Set mysheet = Sheets("Sheet7") ' 遍历所有tr节点 For Each second In seconds ' 临时注释错误跳过语句方便排查问题,稳定运行后可按需恢复 ' On Error Resume Next mysheet.Cells(j, s).Value = second.FindElementsByTag("td")(2).Text Set inputvs = second.FindElementsByTag("input") For Each inputv In inputvs ' 兼容布尔值和字符串两种checked返回情况 If inputv.Attribute("checked") = True Or inputv.Attribute("checked") = "checked" Then ' 打印并写入选中值 Debug.Print inputv.Attribute("value") mysheet.Cells(j, s).Value = inputv.Attribute("value") Else Debug.Print "none" End If Next j = j + 1 Next
更高效的简化写法
不需要遍历所有单选框,直接用CSS选择器定位当前行下选中的单选框即可:
' 替换掉遍历inputvs的整个循环即可 On Error Resume Next ' 防止当前行没有选中单选框时报错 Set checkedRadio = second.FindElementByCss("input[type='radio']:checked") If Err.Number = 0 Then Debug.Print checkedRadio.Attribute("value") mysheet.Cells(j, s).Value = checkedRadio.Attribute("value") End If On Error GoTo 0
内容的提问来源于stack exchange,提问作者CSharp
相关产品推荐
相关产品推荐

