影刀RPA进阶教程网页滚动加载的4种抓取策略——从暴力滚动到智能增量现在的网页十个有八个是滚动加载。列表页往下滑新内容自动加载。到不了底部永远不知道有多少数据。传统判断下一页按钮的翻页逻辑完全失效。这篇文章把滚动加载的 4 种实战策略一次讲透每种都有适用场景和代码。一、策略一暴力计数法——最简单也最笨思路滚一次、等加载、抓一次、计数1。滚到预设次数就停。滚动次数0最大滚动次数20# 预设数据列表[]条件循环(滚动次数最大滚动次数):# 等待当前内容加载等待(1.5秒)# 抓取当前屏幕上所有卡片获取相似元素列表(商品卡片)→ 当前卡片列表 遍历列表(当前卡片列表):提取卡片数据(当前卡片,数据列表)# 滚动到底部滚动页面到底部()滚动次数滚动次数1优点简单不需要判断终止条件。缺点滚 20 次但数据只有 5 页就没了——后面 15 次白等白跑。如果有 50 页——只抓到 20 页。适用场景内容数量大致已知的场景。比如已知小红书搜索结果最多展示前 200 条滚 10 次够用了。二、策略二增量判断法——推荐首选店群矩阵自动化突破运营极限思路每次滚动后对比这次抓到的卡片数和上次抓到的卡片数。数量不变 → 说明已经到底了 → 退出。数据列表[]上次总数0连续无新增次数0条件循环(连续无新增次数2):# 连续2次无新增就退出等待(1.5秒)获取相似元素列表(商品卡片)→ 当前卡片列表 本次新增len(当前卡片列表)-上次总数 如果 本次新增0:连续无新增次数连续无新增次数1否则:连续无新增次数0# 只处理新加载的卡片foriinrange(上次总数,len(当前卡片列表)):提取卡片数据(当前卡片列表[i],数据列表)上次总数len(当前卡片列表)滚动页面到底部()关键设计不是单次无新增就退出而是连续 2 次无新增才退出。为什么网络波动导致某次加载延迟 3 秒——单次无新增就退出会漏数据。连续 2 次确认容错率更高。适用场景90% 以上的滚动加载网页。这是我最常用的策略。三、策略三加载标记法——精准但依赖DOM思路很多网页加载完会在底部出现一个没有更多了的标记。判断这个标记是否出现。条件循环(True):等待(1.5秒)获取相似元素列表(商品卡片)→ 当前卡片列表 提取全部数据(当前卡片列表,数据列表)滚动页面到底部()等待(1秒)# 判断是否到底判断元素是否存在(已无更多内容提示,超时0.5)如果 元素存在:跳出循环小红书、抖音、知乎等平台都会在底部显示已经到底了“没有更多内容了”。抓到它就退出。缺点每个平台、每个版本DOM可能不同。小红书某次改版把没有更多了的 class 名改了——你的流程就永远滚不到头或者永远不会停。稳妥做法标记法 增量法组合。优先判断标记更精准标记判断失败时DOM改了增量法兜底退出。条件循环(True):等待(1.5秒)获取相似元素列表(商品卡片)如果len(当前卡片列表)上次总数:无新增次数1否则:无新增次数0# 标记法优先退出判断元素是否存在(没有更多了,0.5秒)if找到:break# 增量法兜底if无新增次数3:break滚动页面到底部()四、策略四API接口直调——最高效思路不滚页面直接用影刀的发送HTTP请求调后端API拿到 JSON 数据。很多滚动加载的网页实际数据来自后端的分页API。怎么找到API打开F12 → Network 标签滚一下页面 → 观察新出现的 XHR/Fetch 请求找到返回数据量最大的那个请求看它的 URL 和参数比如小红书搜索的 API 长这样https://edith.xiaohongshu.com/api/sns/web/v1/search/notes? keyword连衣裙 page2 page_size20 sortgeneral参数里page就是页码。直接发 HTTP 请求拿数据比模拟滚动快 10 倍。# 影刀HTTP请求指令forpageinrange(1,50):urlfhttps://api.xxx.com/search?keyword连衣裙page{page}发送HTTP请求(GET,url,请求头{User-Agent:Mozilla/5.0 ...,Cookie:cookie值})→ 响应数据 解析JSON(响应数据)→ 数据对象# 解析notes列表notes数据对象[data][items]iflen(notes)0:break# 无数据到最后一页fornoteinnotes:标题note[display_title]作者note[user][nickname]# ... 提取数据优点快、稳定、不受DOM变化影响。限制需要能拿到API的认证参数Cookie 或 Token。有些平台 API 加了签名校验参数里有时效性的sign字段这种就别硬刚 API 了用增量法更省心。temu店群自动化报活动案例五、四种策略选型速查策略适合场景不适合暴力计数已知总数据量数据量不确定增量判断大部分网页推荐数据去重场景卡片数据会重复加载标记平台有明确到底提示DOM不稳定的页面API直调后端接口可直接调用接口有签名校验六、两个通用防坑技巧1. 数据去重滚动加载有时会重复加载之前的数据。你按新卡片的逻辑抓结果抓到了一堆重复的。已采集ID集合set()数据列表[]# 在处理每张卡片时卡片ID获取元素属性(当前卡片,data-id)if卡片IDnotin已采集ID集合:已采集ID集合.add(卡片ID)提取卡片数据()else:跳过# 重复数据2. 滚动步长精细控制有时候滚动页面到底部()滚太快了新内容没触发加载。# 用JS控制滚动距离执行JavaScript(window.scrollBy(0, 600);)# 每次滚600px# 分阶段滚动foriinrange(5):执行JavaScript(fwindow.scrollBy(0, 400);)等待(0.3)分阶段滚动的触发率比一次滚到底高。原理很多懒加载的触发条件不是滚动条到底而是图片进入视口的一定距离内。内容标签#影刀RPA #滚动加载 #数据采集 #网页自动化 #懒加载作者林焱本文为《影刀RPA学习手册》系列文章之一内容源于实操经验的整理与分享。