Selenium爬取Reddit时提前停止滚动问题求助
问题分析与解决
核心问题
- 选择器逻辑错误:你用
By.ID抓取评论,但HTML规范中ID是唯一属性,能拿到19条结果说明-post-rtjson-content根本不是ID,大概率是data-id或class属性,ID选择器在这里完全不适用。 - 滚动对象错误:Reddit的评论加载依赖评论区专属容器的滚动,而非整个网页body,滚动body到顶/底无法触发后续评论的加载机制。
- 等待与终止逻辑缺陷:固定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 comments = [] itemTargetCount = 30 driver = webdriver.Chrome() # 可替换为你使用的浏览器驱动 driver.get("https://www.reddit.com/r/androidapps/comments/13xdn8m/summer_23_promo_codes/") # 等待评论区容器加载完成 wait = WebDriverWait(driver, 10) comment_container = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "_3sf33-9rVAO_v4y0pIW_CH"))) # 设置重试次数,避免单次加载误判 retry_limit = 3 retry_count = 0 while len(comments) < itemTargetCount and retry_count < retry_limit: # 滚动评论区容器到底部(触发评论加载) driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight;", comment_container) # 用显式等待等待新评论加载,替代固定sleep try: wait.until(EC.presence_of_element_located((By.CLASS_NAME, "_1qeIAgB0cPwnLhDF9XSiJM"))) time.sleep(0.5) # 给页面渲染留缓冲时间 except: pass # 抓取所有评论内容(用评论内容的class选择器,可通过浏览器开发者工具确认最新class) comment_elements = driver.find_elements(By.CLASS_NAME, "_1qeIAgB0cPwnLhDF9XSiJM") comments = [elem.text for elem in comment_elements] # 检查评论区容器高度是否变化,判断是否加载了新内容 current_height = driver.execute_script("return arguments[0].scrollHeight;", comment_container) time.sleep(0.5) new_height = driver.execute_script("return arguments[0].scrollHeight;", comment_container) if current_height == new_height: retry_count += 1 else: retry_count = 0 # 加载到新内容,重置重试计数 print(f"获取到{len(comments)}条评论") print(comments) driver.quit()
关键调整说明
- 修正选择器:改用评论内容对应的class选择器(示例为
_1qeIAgB0cPwnLhDF9XSiJM),可通过浏览器右键评论→检查元素确认最新的class属性。 - 精准滚动:直接操作评论区的DOM容器滚动,确保触发Reddit的评论加载逻辑。
- 重试机制:连续3次检测到高度不变才终止循环,避免加载延迟导致提前退出。
- 显式等待:用
WebDriverWait等待评论元素出现,比固定time.sleep更适配不同网络环境下的加载速度。
内容的提问来源于stack exchange,提问作者justin
相关产品推荐
相关产品推荐

