Python Selenium如何从长度不定、相对XPath相同的多个HTML列表提取元素
解决方案
Selenium 的WebElement对象本身支持上下文查找,你无需拼接绝对XPath,直接在已获取的ul元素上执行相对路径查询即可:
# 第一步获取所有符合条件的ul列表 ul_nodes = driver.find_elements(By.XPATH, "//div[contains(@class,'list') and h1/text()='Values']/ul[@class='bullet-list']") nested_li_result = [] for ul in ul_nodes: # 以.开头的XPath代表从当前节点开始查询,属于纯相对路径 li_nodes = ul.find_elements(By.XPATH, "./li") # 收集当前ul下的所有li文本 current_li_texts = [li.text for li in li_nodes] nested_li_result.append(current_li_texts)
最终得到的nested_li_result是二维数组,每个子数组对应一个ul列表下的所有条目,自动区分了列表项的所属来源。
注意事项
- 相对路径开头的
.不可省略,否则会默认从整个文档根节点开始查询,失去上下文查找的意义 - 你原有示例代码中的
b_list需要在每次遍历ul前重置,否则会把所有列表的条目都累加进同一个数组,导致最终结果重复
内容的提问来源于stack exchange,提问作者Gman
相关产品推荐
相关产品推荐

