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

Python使用Selenium滚动页面后获取的page_source未更新如何解决

Selenium滚动后page_source未更新修复方案
  • 修正高度初始化位置:你当前代码中last_height = browser.execute_script("return document.body.scrollHeight")的执行时机在browser.get(URL_by_day)之前,此时浏览器还未加载目标社交媒体页面,获取的是登录页的高度,导致第一次滚动高度判断逻辑错误,请将这行代码移动到browser.get(URL_by_day)之后、滚动循环开始之前的位置。
  • 延长页面加载等待时间:固定休眠0.3秒不足以覆盖社交媒体懒加载的请求+渲染耗时,优先将固定等待替换为显式等待,等待新帖子元素加载完成后再进行高度判断,示例代码如下:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 替换为目标站点帖子元素的通用CSS选择器
POST_SELECTOR = ".post-item"
wait = WebDriverWait(browser, 10)

# 确保目标页面加载完成后再初始化高度
last_height = browser.execute_script("return document.body.scrollHeight")

while True:
    old_post_count = len(browser.find_elements(By.CSS_SELECTOR, POST_SELECTOR))
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    try:
        # 等待新帖子加载完成
        wait.until(lambda x: len(x.find_elements(By.CSS_SELECTOR, POST_SELECTOR)) > old_post_count)
        time.sleep(0.5)
        new_height = browser.execute_script("return document.body.scrollHeight")
        if new_height == last_height:
            break
        last_height = new_height
    except:
        # 10秒无新内容加载,判定已到页面底部
        break
  • 替换滚动容器:多数社交媒体平台的滚动区域为页面内部的自定义容器,而非全局document.body,滚动body无法触发懒加载逻辑。找到页面实际滚动容器的元素选择器,替换滚动逻辑即可:
# 替换为实际滚动容器的CSS选择器
scroll_container = browser.find_element(By.CSS_SELECTOR, ".main-scroll-area")
browser.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scroll_container)
  • 虚拟滚动场景适配:如果目标站点采用虚拟滚动方案(仅渲染可视区域附近内容,滚动后旧内容会从DOM中移除),不要等全部滚动完成后再一次性获取page_source,每次滚动后单独提取新增帖子内容存储即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:15:05