未知确切属性名时的XPath使用:通用提取指定列表项
通用提取方案
可以通过XPath的任意属性匹配语法实现需求,无需依赖固定属性名,以下是两种场景的解决方案:
场景1:提取ul/ol/div(自身含属性值带"bib"/"ref")下的li元素
使用下面的XPath表达式,先定位到带有任意属性值包含"bib"或"ref"的ul、ol、div标签,再选取其下的所有li:
from selenium.webdriver.common.by import By # 通用XPath表达式 xpath_expr = "//*[self::ul or self::ol or self::div][@*[contains(., 'bib') or contains(., 'ref')]]//li" for r in g.find_elements(By.XPATH, xpath_expr): print(r.text)
表达式说明:
self::ul or self::ol or self::div:限定只匹配ul、ol、div三种容器标签@*[contains(., 'bib') or contains(., 'ref')]:匹配任意属性(@*)的值中包含"bib"或"ref"的元素//li:选取该容器下所有层级的li元素
场景2:提取自身含属性值带"bib"/"ref"的li元素
如果目标li是自身带有属性值含"bib"/"ref"的元素,可以用更直接的表达式:
xpath_expr = "//li[@*[contains(., 'bib') or contains(., 'ref')]]" for r in g.find_elements(By.XPATH, xpath_expr): print(r.text)
表达式说明:
//li:全局匹配所有li元素@*[contains(., 'bib') or contains(., 'ref')]:筛选出任意属性值包含"bib"或"ref"的li
上述写法完全摆脱了固定属性名的限制,能适配属性名变化的场景。
内容的提问来源于stack exchange,提问作者mlee_jordan
相关产品推荐
相关产品推荐

