Selenium在子元素内执行XPath查找始终返回全局匹配项问题
问题原因
这是XPath的语法规则导致的:
- XPath表达式开头的
//代表从整个HTML文档的根节点开始全局搜索匹配节点,即便你是在单个元素对象上调用查找方法,只要路径开头为//,Selenium依然会扫描全量DOM,所以每次返回的都是页面第一个匹配的a标签,调用find_elements就会返回全页所有符合规则的a标签。
修复方案
仅需修改XPath表达式,在开头加.代表限定从当前元素的上下文开始搜索即可:
for elem in listElementsMembership: elemDetailsLink = elem.find_element_by_xpath('.//a[contains(@href,"EditMembership")]')
你也可以直接用CSS选择器实现相同效果,写法更简洁,也不会出现这类路径范围的坑:
for elem in listElementsMembership: elemDetailsLink = elem.find_element_by_css_selector('a[href*="EditMembership"]')
内容的提问来源于stack exchange,提问作者TheFaithfulLearner
相关产品推荐
相关产品推荐

