Selenium技术问题:如何获取数据绑定变量对应的输入值
Selenium获取不到输入框显示值的原因及解决方法
原因
你遇到的情况是因为这个输入框用了前端双向绑定框架(从代码里的data-bind="{wireless5g1.ssid}"能看出来,比如Knockout.js这类),输入框的显示值是框架动态渲染的,并没有同步写到input元素的value属性里——所以outer HTML里看不到,但浏览器检查器显示的是实时渲染后的状态,所以能看到。
另外,你用.text和innerHTML本来就不对:input是自闭合标签,没有子元素,所以innerHTML必然为空;.text是拿元素的文本节点内容,而输入框的输入值根本不存在于文本节点里,自然拿不到。
解决方法
方法1:用Selenium的get_attribute("value")获取
这是最通用的方法,直接获取输入框的实时value属性值:
# Python示例 from selenium.webdriver.common.by import By # 定位到目标input元素 input_elem = driver.find_element(By.CSS_SELECTOR, ".text-wrap-inner input[type='text']") # 获取实际显示值 real_value = input_elem.get_attribute("value") print(real_value)
方法2:直接调用前端框架的数据源(针对绑定场景)
既然页面用了双向绑定,也可以直接通过执行JS拿到绑定的原始数据:
# 执行JS获取绑定的wireless5g1.ssid值 real_value = driver.execute_script("return wireless5g1.ssid();") print(real_value)
你提供的页面代码
<div widget="textbox" class="l-inline-block container widget-container text-container" data-bind="{wireless5g1.ssid}" label-field="{WIRELESS_SETTINGS.WIRELESS_NETWORK_NAME}" id="widget--1ed5eee2-5134-b2f5-6ec7-a7a690939c20"> <div class="widget-fieldlabel-wrap"> <div class="widget-fieldlabel-inner"> <label class="widget-fieldlabel text-fieldlabel">Network Name (SSID)</label> <span class="widget-separator">:</span> </div> </div> <div class="widget-wrap-outer text-wrap-outer"> <div class="widget-wrap text-wrap"> <span class="text-wrap-before"></span> <span class="text-wrap-inner"> <input type="text"> </span> <span class="text-wrap-after"></span> </div> </div> </div>
内容的提问来源于stack exchange,提问作者quite68
相关产品推荐
相关产品推荐

