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
相关产品推荐
相关产品推荐

