如何在Selenium中基于<block>元素相对定位<taga>和<tagb>?
如何从Selenium获取的元素中定位子元素和
目标HTML结构
<block data-id="1234"> <taga>New York</taga> <tagb>Yankees</tagb> </block> <block data-id="5678"> <taga>Montreal</taga> <tagb>Expos</tagb> </block> <block data-id="2468"> <taga>Boston</taga> <tagb>Red Sox</tagb> </block>
现有Python代码
teams = driver.find_elements("xpath", "//block") for team in teams: print(team.get_attribute("data-id"))
你之前用//taga和//tagb定位的问题在于,这类XPath是文档级绝对路径,会返回整个页面中第一个匹配的元素,而非当前<block>下的子元素。
正确解决方法
要定位当前team元素下的子元素,需使用相对XPath,在路径前加.表示从当前元素开始查找:
- 若
<taga>和<tagb>是<block>的直接子元素,用./taga和./tagb:
print(team.find_element("xpath", "./taga").text) print(team.find_element("xpath", "./tagb").text)
- 若子元素可能嵌套在更深层级,用
.//taga和.//tagb(匹配当前元素下所有后代中的目标元素):
print(team.find_element("xpath", ".//taga").text) print(team.find_element("xpath", ".//tagb").text)
修改后的完整代码
teams = driver.find_elements("xpath", "//block") for team in teams: print(f"ID: {team.get_attribute('data-id')}") print(f"城市: {team.find_element('xpath', './taga').text}") print(f"球队: {team.find_element('xpath', './tagb').text}") print("---")
内容的提问来源于stack exchange,提问作者Damon Brodie
相关产品推荐
相关产品推荐

