如何使用Python Selenium获取已定位span元素前序div的innerText
结论
该需求完全可以直接通过Selenium实现,无需借助BeautifulSoup。你之前调用parent相关方法未生效,是因为parent方法定位的是当前元素的父级节点,而你要找的div是span的前置同级节点,不属于父级范畴。
具体实现方法
你已经掌握了span元素的定位逻辑,有两种成熟写法可以拿到目标内容:
- 方案1:单XPath一步定位
利用XPath内置的preceding-sibling轴(专门用于查找当前节点之前的同级节点),可以直接写出定位表达式,一步拿到目标div:from selenium.webdriver.common.by import By # 直接匹配目标div target_div = driver.find_element( By.XPATH, '//*[text()="Frequency:"]/preceding-sibling::div[1]' ) result = target_div.text # 取值为"100.00"注意:表达式末尾的
[1]表示取离当前span最近的1个前置同级div,避免页面存在其他前置同级div时匹配错误。 - 方案2:基于已定位的span元素做相对查找
如果你已经提前将span元素存储为变量,可以基于该元素做相对定位,无需重新全页扫描:# 你之前已经定位到的span元素 span_ele = driver.find_element(By.XPATH, '//*[text()="Frequency:"]') # 从span元素出发查找最近的前置同级div target_div = span_ele.find_element(By.XPATH, './preceding-sibling::div[1]') result = target_div.text
注意事项
- 不要混淆节点关系:当前span的父节点是外层class为
value的div,不是你要找的浮动div,因此所有查找父节点的方法都无法拿到目标结果 - 如果前置同级节点的标签不固定,可以将表达式里的
div替换为*,即可匹配前一个任意标签的同级节点 - 不要省略
[1]索引:不加索引时会匹配当前节点前所有符合标签规则的同级节点,大概率会抛出多元素匹配的报错
内容的提问来源于stack exchange,提问作者T1mQa
相关产品推荐
相关产品推荐

