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

如何用Python+Playwright实现无限滚动页面自动滚动至底部并停止

Playwright 无限滚动自动停止实现方案

问题原因

你之前编写的JS代码无法生效的核心原因是page.evaluate()仅等待同步代码执行完成就会立即返回,不会等待内部setInterval这类异步逻辑的执行结果,所以代码看起来像没有运行就直接结束了。

完整实现方案

核心逻辑为每次滚动后对比页面/滚动容器的高度,连续多次高度无变化时判定所有内容加载完成,自动停止滚动。

整页滚动实现

适用于整个页面为无限滚动的场景:

def auto_scroll_to_end(page, wait_time=1000, max_stable_count=3):
    # 记录初始页面高度
    last_height = page.evaluate("document.body.scrollHeight")
    stable_count = 0
    while True:
        # 滚动到页面底部
        page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
        # 等待新内容加载
        page.wait_for_timeout(wait_time)
        # 获取加载完成后的新高度
        new_height = page.evaluate("document.body.scrollHeight")
        # 高度无变化则计数
        if new_height == last_height:
            stable_count += 1
            # 连续多次高度无变化,判定内容全部加载完成
            if stable_count >= max_stable_count:
                break
        else:
            # 高度有变化重置计数,更新高度基准值
            stable_count = 0
            last_height = new_height

指定容器滚动实现

适用于评论区、侧边栏等局部容器内部无限滚动的场景:

def auto_scroll_container_to_end(page, container_selector, wait_time=1000, max_stable_count=3):
    # 记录容器初始高度
    last_height = page.evaluate(f'document.querySelector("{container_selector}").scrollHeight')
    stable_count = 0
    while True:
        # 滚动容器到底部
        page.evaluate(f'''
            const container = document.querySelector("{container_selector}");
            container.scrollTop = container.scrollHeight;
        ''')
        # 等待新内容加载
        page.wait_for_timeout(wait_time)
        # 获取容器新高度
        new_height = page.evaluate(f'document.querySelector("{container_selector}").scrollHeight')
        if new_height == last_height:
            stable_count += 1
            if stable_count >= max_stable_count:
                break
        else:
            stable_count = 0
            last_height = new_height

# 调用示例,传入评论容器的选择器
auto_scroll_container_to_end(page, ".comment-container")

配置说明

  • wait_time:每次滚动后等待内容加载的时长,单位为毫秒,站点加载速度慢可以适当调大,建议取值1500或2000
  • max_stable_count:连续多少次高度无变化判定为加载完成,默认3次可以避免网络波动、加载延迟导致的提前停止
  • 部分站点滚动后会出现加载动画,可以在等待逻辑前加入等待加载动画消失的逻辑,避免误判:
# 示例:等待加载动画消失
page.wait_for_selector(".loading-spinner", state="hidden", timeout=wait_time)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:03