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

Selenium find_elements(By.CLASS_NAME)仅部分生效,如何获取全部目标元素?

解决Selenium爬取Reddit时无法获取全部元素的问题

核心原因

Reddit采用滚动加载机制,初始仅渲染视口内内容,未进入视野的元素不会被加载到DOM中,直接调用find_elements只能拿到已渲染的部分元素。另外你使用的类名_3sf33-9rVAO_v4y0pIW_CH属于动态生成类名,这类标识大概率会随页面更新失效,建议替换成更稳定的定位方式。

解决方案步骤

  1. 模拟滚动加载全部内容
    循环执行滚动操作,直到页面停止加载新内容:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome()
driver.get("目标Reddit链接")
wait = WebDriverWait(driver, 10)

# 等待初始元素加载完成
wait.until(EC.presence_of_element_located((By.CLASS_NAME, "_3sf33-9rVAO_v4y0pIW_CH")))

# 滚动加载全部内容
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
    # 滚动至页面底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待新内容加载
    time.sleep(2)
    # 对比滚动高度判断是否加载完成
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

# 此时获取全部目标元素
elements = driver.find_elements(By.CLASS_NAME, "_3sf33-9rVAO_v4y0pIW_CH")
print(f"共获取到 {len(elements)} 个元素")
  1. 更换稳定的定位策略
    放弃动态类名,改用元素的固定属性或层级结构定位,比如Reddit帖子普遍带有data-testid="post-container"属性:
elements = driver.find_elements(By.CSS_SELECTOR, 'div[data-testid="post-container"]')

也可以通过父元素层级缩小定位范围:

elements = driver.find_elements(By.CSS_SELECTOR, 'div._1OVBBWLtHoSPfGCRaPzpTf div._3sf33-9rVAO_v4y0pIW_CH')
  1. 排查iframe嵌套情况
    极少数场景下目标元素会被嵌套在iframe中,需要先切换到iframe上下文再查找:
# 定位并切换到目标iframe
iframe = wait.until(EC.presence_of_element_located((By.TAG_NAME, "iframe")))
driver.switch_to.frame(iframe)
# 查找元素
elements = driver.find_elements(By.CLASS_NAME, "_3sf33-9rVAO_v4y0pIW_CH")
# 切换回主文档
driver.switch_to.default_content()

注意事项

  • 滚动间隔的time.sleep(2)可根据网络速度调整,避免因加载不充分漏抓元素。
  • 若遭遇Reddit反爬限制,可添加随机延迟、更换浏览器User-Agent降低检测风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:17