如何用Selenium分步滚动无限加载页面 确保懒加载图片正常加载
Selenium逐段滚动加载懒加载图片方案
原有实现直接滚动到当前页面总高度,中间未进入视口的懒加载图片无法触发资源加载逻辑,仅保留base64占位符,改为逐段滚动即可让所有图片依次进入视口完成加载,优化后代码如下:
import time def scroll_to_bottom(driver, step=300, wait_per_step=0.5, final_wait=2): last_height = driver.execute_script("return document.body.scrollHeight") current_scroll = 0 while True: # 单次滚动固定像素步长 current_scroll += step driver.execute_script(f"window.scrollTo(0, {current_scroll});") # 等待当前视口内图片完成加载 time.sleep(wait_per_step) # 滚动高度超过当前页面总高度时判断是否触底 if current_scroll >= last_height: # 等待无限加载的新内容渲染完成 time.sleep(final_wait) new_height = driver.execute_script("return document.body.scrollHeight") # 页面高度无变化说明已到达真正底部,终止循环 if new_height == last_height: break # 有新内容加载,更新总高度继续滚动 last_height = new_height
参数说明
step:单次滚动的像素高度,默认300,可根据页面懒加载触发阈值调整,步长越小越能覆盖所有图片的触发条件wait_per_step:每次滚动后的等待时长,单位为秒,默认0.5,网络状况差的场景可适当调大final_wait:每次触碰到当前页面底部后的等待时长,给无限加载的新内容预留渲染时间,默认2秒
进阶优化
如果不想用固定等待浪费时间,可以将固定等待替换为Selenium显示等待,判断当前视口内的img元素src属性是否已替换为非base64的真实资源链接,进一步提升运行效率。
内容的提问来源于stack exchange,提问作者Norhther
相关产品推荐
相关产品推荐

