Selenium Python如何遍历ol内所有li元素并提取对应h2文本
问题核心原因
- 你的XPath仅定位到了
ol容器本身,绝大多数场景下该ol元素在页面中仅存在1个,因此articles_elements列表长度为1,循环仅执行1次,最终只能输出1条结果 - 你没有定位到
ol下的所有li子元素,这是无法获取完整列表的直接原因
修正后可直接运行的代码
# 定位到ol下的所有li元素 articles_list = r'/html/body/main/div/div/section/ol/li' articles_elements = driver.find_elements_by_xpath(articles_list) for article in articles_elements: # 从当前li节点开始相对路径查找标题 title = article.find_element_by_xpath('.//div/div/div[2]/div[1]/a[1]/h2').text print('Title:' + title)
如果你的页面中ol下前2个li是无效的广告/占位内容(从你给出的XPath示例来看li下标从3开始),可以直接在定位时过滤:
# 仅获取下标大于等于3的li元素 articles_list = r'/html/body/main/div/div/section/ol/li[position()>=3]'
额外优化建议
- 高版本Selenium已经弃用
find_elements_by_xpath写法,推荐使用更规范的API:from selenium.webdriver.common.by import By articles_elements = driver.find_elements(By.XPATH, articles_list) - 尽量避免使用超长绝对XPath,优先用class、id等属性做相对定位,页面结构小幅调整时不会直接导致定位失效
内容的提问来源于stack exchange,提问作者Cristian Avendaño
相关产品推荐
相关产品推荐

