Python Selenium如何获取aria-hidden属性的布尔值
错误原因与正确实现
你代码里有3个直接导致运行失败的问题:
- XPath写法错误:浏览器渲染HTML表格时,会自动为
<table>标签补全<tbody>子节点,你写的//*[@id="prefs"]/tr是匹配id=prefs节点的直接子元素tr,但实际tr是tbody的子元素,和table标签隔了一层,自然匹配不到。另外写/html/body开头的绝对XPath容错率极差,页面DOM稍有变动就会失效,不推荐使用。 - 方法调用错误:Selenium的Python API不存在
get_text()方法,这是BeautifulSoup等静态解析库的方法,Selenium取元素可见文本用的是.text属性。 - 取值逻辑错误:你要获取的
aria-hidden是HTML标签的属性,不是标签包裹的文本内容,哪怕元素定位成功、用对了取文本的方法,也拿不到这个属性的值,取属性必须调用.get_attribute()方法。
正确代码
基础写法(适配旧版Selenium)
# XPath里用//tr跳过中间层级,不用硬写tbody,兼容性更好 target_element = driver.find_element_by_xpath('//*[@id="prefs"]//tr/td[1]/span/span') # 取aria-hidden属性值,默认返回字符串格式的'true'/'false' aria_hidden_str = target_element.get_attribute('aria-hidden') # 需要布尔值的话自行转换即可 aria_hidden_bool = aria_hidden_str.lower() == 'true'
稳妥写法(适配新版Selenium,带显式等待)
新版Selenium已经废弃了find_element_by_*系列方法,推荐用统一的find_element写法,加上显式等待可以避免页面未加载完成导致的定位失败:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化等待器,最长等待10秒 wait = WebDriverWait(driver, 10) # 等待元素加载到DOM树后再定位 target_element = wait.until(EC.presence_of_element_located( (By.XPATH, '//*[@id="prefs"]//tr/td[1]/span/span') )) aria_hidden_str = target_element.get_attribute('aria-hidden') aria_hidden_bool = aria_hidden_str.lower() == 'true'
如果按上面写法还是定位不到,优先检查目标元素是否嵌套在iframe中,若存在iframe需要先调用driver.switch_to.frame()切入对应框架再定位元素。
内容的提问来源于stack exchange,提问作者StudentLearner
相关产品推荐
相关产品推荐

