VBA调用WebDriver无法定位银行登录页用户名input输入框问题咨询
问题原因及解决方案
首先是你代码里的错误点
- 你使用的
name属性值是动态生成的,后缀的数字串是页面加载时生成的随机时间戳,每次刷新页面都会变化,写死固定值自然无法匹配到元素 FindElementByClass方法仅支持传入单个类名,你传入的fblock100 > .ng-valid是CSS组合选择器,不能用于该方法FindElementByCss方法不需要加css=前缀,直接传入选择器内容即可
可行的修复方案
- 改用稳定的唯一属性定位元素
该页面的用户名输入框有固定不变的formcontrolname="username"属性,直接用该属性做定位即可,不会随页面刷新变化:
Dim Mybrowser As New WebDriver Set Mybrowser = New WebDriver Mybrowser.Start "chrome" Mybrowser.Get "https://tbconline.ge/tbcrd/login?t=false" ' 加等待,最多等10秒让元素加载完成 Mybrowser.FindElementByCss("input[formcontrolname='username']", 10000).SendKeys "test" ' 密码输入框同理用formcontrolname定位,不用动态name Mybrowser.FindElementByCss("input[formcontrolname='password']").SendKeys "你的密码"
- 如果按上述方法还是找不到元素,检查是否存在iframe嵌套
银行网站经常会把登录表单放在独立iframe中,需要先切换到对应iframe的上下文才能找到内部元素:
' 先切换到表单所在的iframe,索引从0开始计数,可根据实际页面调整 Mybrowser.SwitchToFrame 0 ' 再执行元素查找操作 Mybrowser.FindElementByCss("input[formcontrolname='username']").SendKeys "test" ' 操作完表单后切回默认上下文 Mybrowser.SwitchToDefaultContent
额外说明
确实存在部分场景下可见元素无法直接被查找到,常见原因除了上述的动态属性、iframe嵌套、加载未完成之外,还有可能是元素被设置了visibility: hidden、display: none,或者处于Shadow DOM内部,需要对应调整定位逻辑。
内容的提问来源于stack exchange,提问作者Some One
相关产品推荐
相关产品推荐

