如何通过Selenium获取无障碍计算属性中的输入框真实值
如何获取网页可见但HTML中未显示的输入框真实数值?
我需要获取一个输入框的数值,该数值在网页上可见,但HTML标签中仅显示"---",未包含真实数值。在Chrome开发者工具的无障碍(Accessibility)->计算属性(Computed Properties)下能找到真实数值,但常规Selenium方法无法获取。
已尝试的方法及结果
- 方法1:获取
innerHTML
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='exttemp']"))).get_attribute("innerHTML"))
输出:空
- 方法2:获取元素
text
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='exttemp']"))).text)
输出:空
- 方法3:获取
value属性
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='exttemp']"))).get_attribute("value"))
输出:"---"
- 方法4:获取
value属性(通过get_property)
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='exttemp']"))).get_property("value"))
输出:"---"
解决方案:通过Chrome DevTools Protocol(CDP)获取无障碍计算属性
由于真实数值仅暴露在无障碍计算属性中,可借助CDP的Accessibility.getFullAXTree命令提取该数值,代码示例如下:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC # 等待目标元素加载完成 target_element = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, "exttemp")) ) # 获取元素的backendNodeId(用于匹配无障碍树节点) location = target_element.location backend_node_id = driver.execute_cdp_cmd( "DOM.getNodeForLocation", {"x": location["x"], "y": location["y"]} )["backendNodeId"] # 获取完整的无障碍树数据 full_ax_tree = driver.execute_cdp_cmd("Accessibility.getFullAXTree", {}) # 遍历无障碍树,找到目标节点并提取真实数值 for node in full_ax_tree["nodes"]: if node.get("backendDOMNodeId") == backend_node_id: real_value = node.get("value", {}).get("value") print(f"真实数值: {real_value}") break
原理说明
网页通过无障碍API将真实数值暴露给辅助设备,Selenium的常规方法无法直接访问这些计算后的属性,而CDP命令可以直接调用浏览器的无障碍接口,获取完整的计算属性树,从而提取出网页可见的真实数值。
内容的提问来源于stack exchange,提问作者Pablo Loaiza
相关产品推荐
相关产品推荐

