You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:18:27