You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Selenium WebDriver获取指定属性的div并解决迭代报错问题

网页爬取问题:无法遍历符合指定属性的元素

需求与问题

我是网页爬取新手,想要爬取某网站中所有带有data-feature-id=homepage/story属性的元素,最终目标是提取每个该元素下的子元素。但我无法获取所有符合该属性的元素,尝试定位外层div时仅返回一个元素。

编写的代码

def getLinks(self):
    container = self.driver.find_element(By.XPATH, '//*[@id="__next"]/div[3]/div/main/article/div')
    for item in container:
        headline = container.find_element(By.XPATH, '//*[@id="__next"]/div[3]/div/main/article/div/div[1]/div/div[1]/a/h3')
        print(headline)

运行报错

TypeError:'WebElement' object is not iterable

解决方法

问题根源

  1. find_element仅返回第一个匹配的单个WebElement对象,不是可遍历的列表,直接用for循环会触发类型错误。
  2. 采用绝对XPATH定位子元素,每次都会从根节点查找,无法匹配每个子项的对应内容。
  3. 未直接利用目标元素的data-feature-id属性定位,依赖不稳定的外层div路径。

修正后的代码(XPATH版本)

def getLinks(self):
    # 用find_elements(复数)获取所有符合属性的元素列表
    story_items = self.driver.find_elements(By.XPATH, '//*[@data-feature-id="homepage/story"]')
    for item in story_items:
        # 以当前item为根,相对定位子元素(XPATH开头加.)
        headline = item.find_element(By.XPATH, './/div[1]/div/div[1]/a/h3')
        # 提取并打印标题文本
        print(headline.text)

修正后的代码(CSS选择器版本,更简洁)

def getLinks(self):
    # CSS选择器定位带指定属性的元素
    story_items = self.driver.find_elements(By.CSS_SELECTOR, '[data-feature-id="homepage/story"]')
    for item in story_items:
        # 相对定位子元素
        headline = item.find_element(By.CSS_SELECTOR, 'div:nth-child(1) div div:nth-child(1) a h3')
        print(headline.text)

关键注意点

  • 必须用find_elements(复数形式)才能获取所有匹配元素的可遍历列表。
  • 子元素定位时,XPATH开头的.表示仅在当前元素范围内查找,避免重复定位到第一个元素。
  • 直接通过data-feature-id属性定位目标元素,比依赖外层div的绝对路径更稳定,网站结构微调时不易失效。

内容的提问来源于stack exchange,提问作者LoganN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:01:16