如何用VBA Selenium更新ID/Class动态变化的网页值
解决动态ID元素定位与修改问题
问题分析
你要修改的目标是<input>文本输入框,但原代码用FindElementByLinkText定位完全错误——LinkText仅用于定位<a>链接元素,目标元素并非链接,自然无法找到。另外元素ID包含动态变化的数字,不能直接用ID定位,需要换用其他稳定的定位逻辑。
可行的定位方案与代码示例
方案1:通过固定title属性定位
目标输入框有固定的title="Price"属性,可直接用这个特征定位:
Dim POamount As Selenium.WebElement Set POamount = CD.FindElementByCss("[title='Price']") ' 清空原有数值并输入新值 POamount.Clear POamount.SendKeys "2.500000" ' 打印当前属性值验证 Debug.Print POamount.Attribute("value")
方案2:通过name属性前缀+后缀匹配
name属性格式为order_header_change[order_line_change_attributes][动态数字][price],可以用CSS选择器匹配固定的前后部分:
Dim POamount As Selenium.WebElement ' 匹配name以指定前缀开头、指定后缀结尾的input元素 Set POamount = CD.FindElementByCss("input[name^='order_header_change[order_line_change_attributes]['][name$='][price]']") POamount.Clear POamount.SendKeys "3.000000" Debug.Print POamount.Attribute("value")
方案3:结合value与type属性定位
如果页面中仅有这一个值为1.000000的文本输入框,可直接用这两个特征组合定位:
Dim POamount As Selenium.WebElement Set POamount = CD.FindElementByCss("input[type='text'][value='1.000000']") POamount.Clear POamount.SendKeys "4.200000" Debug.Print POamount.Attribute("value")
注意事项
- 确保Selenium驱动(如ChromeDriver)版本与浏览器版本完全匹配
- 如果页面存在多个符合定位条件的元素,可改用
FindElementsByCss获取元素集合,再通过索引或其他附加特征筛选目标元素
内容的提问来源于stack exchange,提问作者Tomas
相关产品推荐
相关产品推荐

