影刀RPA实操指南:翻页逻辑的3种实现方式——按钮判断/URL拼接/滚动加载
采集多页数据时,翻到第5页就停了,或者一直翻下去停不下来。
原因:没搞清楚网站的翻页机制。
三种核心翻页逻辑:
- 有“下一页”按钮 → 按钮判断法
- URL里有页码参数 → URL拼接法
- 滚动到底部自动加载 → 滚动加载法
一、按钮判断法(最通用,覆盖90%的网站)
适用场景:分页有明确的“下一页”按钮,点击后刷新整个页面或局部加载。
核心思路:循环判断“下一页”按钮是否存在,存在就点,不存在就结束。
操作步骤:
- 捕获“下一页”按钮元素。
- 用“条件循环”包裹翻页逻辑。
- 循环条件:
判断元素是否存在('下一页按钮') == True。 - 循环体内:点击下一页 → 等待新内容出现 → 采集数据。
# 影刀指令序列(标准写法)

# 采集第一页数据(先采第一页)
# 条件循环开始(当下一页按钮存在时循环)
# 循环条件:{下一页存在} == True

# 1. 鼠标点击“下一页”按钮(模式:模拟点击)
# 2. 固定等待 1 秒(可选,给页面反应时间)

# 3. 等待元素出现(新页面的标志元素,如第一行商品)
# 超时时间:5秒
# 4. 采集当前页数据
# 5. 更新判断:再次判断“下一页”按钮是否存在
# (放在循环末尾,用于下一次循环条件判断)
# 条件循环结束
容易踩的坑:
- 最后一页“下一页”按钮可能变成灰色不可点,但元素依然存在。
解决:判断时不仅要存在,还要可点击。可以用“获取元素属性”拿disabled属性。 - 点击后页面刷新慢,等待时间不够。
解决:用“等待元素出现”(新页面的独特元素)而不是固定等待。
二、URL拼接法(速度最快,适合规则翻页)
适用场景:翻页时URL有规律变化,如:
https://xxx.com/page/1→page/2→page/3https://xxx.com?page=1→?page=2
核心思路:不用点击按钮,直接修改URL打开新页码。
操作步骤:
- 观察URL规律,确定页码参数位置。
- 获取总页数(或设置最大页数)。
- 用“固定次数循环”从第1页循环到第N页。
- 用字符串拼接生成新URL,用“打开网页”指令跳转。
# 示例:URL 为 https://shop.com/list?page=1

# 1. 设置总页数为 {total_pages}(可从页面提取或手动填)
# 2. 固定次数循环,循环次数 = {total_pages}
# 循环变量:{current_page} 从1开始
# 3. 拼接URL
# 基础URL:https://shop.com/list?page=
# 新URL:{base_url}{current_page}
# 用“字符串拼接”指令或“计算表达式”
# 4. 打开网页(URL = {new_url})
# 5. 等待元素出现(列表容器)
# 6. 采集当前页数据
# 7. 循环结束
优势:
- 不依赖“下一页”按钮,避免元素定位失败。
- 可以随机跳页(如只采集第1,3,5页)。
- 速度快(不需要等待点击和页面切换动画)。
注意:部分网站翻页URL不变(伪静态或AJAX加载),URL拼接法无效。
三、滚动加载法(处理无限滚动)
适用场景:抖音、小红书、微博等瀑布流,滚动到底部自动加载新内容,没有“下一页”按钮。
核心思路:模拟滚动到底部 → 等待新内容出现 → 重复直到没有新内容。
操作步骤:
- 捕获一个“加载更多”的提示元素(如“正在加载中”),或判断页面高度变化。
- 用“条件循环”控制滚动次数。
- 循环体内:滚动到底部 → 等待新内容加载 → 判断是否到底。
# 无限滚动采集模板
# 1. 设置变量 {last_height} = 0
# 2. 设置变量 {no_new_count} = 0(连续无新内容的次数)
# 条件循环(当 {no_new_count} < 3 时继续)
# 3. 滚动页面到底部
# 指令:“滚动窗口”或“滚动元素到底部”
# 4. 固定等待 1.5 秒(等待加载)
# 5. 获取当前页面高度(用“执行JS”指令)
# JS代码:return document.body.scrollHeight
# 输出到变量 {current_height}
# 6. 如果 {current_height} == {last_height}
# {no_new_count} = {no_new_count} + 1
# 否则
# {no_new_count} = 0
# {last_height} = {current_height}
# 7. 采集当前页面新出现的元素
# 注意:需要记录已采集的ID,避免重复
# 循环结束
影刀里的滚动指令:
- 指令面板搜索“滚动”,选择“滚动窗口”(滚动整个页面)。
- 方向选“到底部”,方式选“平滑滚动”或“直接滚动”。
判断是否到底的简易方法:
捕获一个“没有更多内容”的提示元素,如“已经到底了”。
用“判断元素是否存在”,出现则跳出循环。
四、三种方法对比选型
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 按钮判断法 | 有明确下一页按钮 | 通用性强,不依赖URL规律 | 依赖按钮元素定位 |
| URL拼接法 | URL包含页码参数 | 速度快,可随机跳页 | URL无规律时无效 |
| 滚动加载法 | 瀑布流无限滚动 | 模拟真实用户行为 | 需要处理重复数据 |
决策树:
是否有“下一页”按钮?
├─ 是 → 按钮判断法
└─ 否 → 继续判断
URL是否有页码参数(如?page=2)?
├─ 是 → URL拼接法
└─ 否 → 滚动加载法(大概率)
五、实战:混合使用按钮判断+URL拼接
场景:列表页有“下一页”按钮,但点击后URL也会变(如从 ?page=1 变 ?page=2)。
可以用URL拼接法快速跳转,同时用按钮判断法做兜底。
# 混合法流程
# 1. 获取总页数(从页面提取“共23页”)
# 2. 固定次数循环,次数=总页数
# 3. 采集当前页数据(直接用当前URL)
# 4. 如果不是最后一页,拼接下一页URL
# 新URL = base_url + "?page=" + {current_page+1}
# 5. 打开网页(新URL)
# 6. 等待元素出现(列表容器)
# 7. (可选)校验当前页码是不是预期的,不是则用按钮点击重试
六、常见问题速查
| 问题 | 原因 | 解决方法 |
|---|---|---|
| 按钮判断法死循环 | “下一页”按钮一直存在(最后一页变灰但存在) | 增加判断:按钮是否包含“disabled”属性 |
| URL拼接法打开后内容不对 | 需要带Cookie或Referer | 先用打开网页指令保持会话 |
| 滚动加载法重复采集 | 每次滚动后采集全部列表,没去重 | 记录已采集的ID(如商品ID),只采新的 |
| 滚动加载永远加载不完 | 滚动太快,触发反爬 | 增加滚动间隔(2~3秒),或随机停顿 |
| 翻到第2页元素定位失败 | 页面结构变化(如class加了“current”) | 换用更通用的XPath,避免依赖页码相关class |
影刀专属操作清单
| 操作 | 精确指令/位置 | 说明 |
|---|---|---|
| 条件循环 | 流程控制 → 条件循环 | 配合元素存在判断 |
| 判断元素是否存在 | 流程控制 → 判断元素是否存在 | 超时设0.5秒 |
| 滚动窗口 | 指令搜索“滚动窗口” | 滚动整个页面到底部 |
| 执行JS | 指令搜索“执行JavaScript” | 获取页面高度 |
| 字符串拼接 | 指令搜索“字符串拼接” | 生成新URL |
| 打开网页 | 浏览器指令 → 打开网页 | 用拼接好的URL |
版本差异:社区版“执行JavaScript”指令可用,但JS代码写错不会报详细错误。先在浏览器控制台调试好再贴进去。
推荐资源
- 影刀官方模板:搜索“翻页采集(按钮判断)”和“翻页采集(URL拼接)”
- 影刀学院视频:《翻页逻辑详解——三种方式一次学会》(约20分钟)
- 实操练习:找一个新闻网站(有下一页按钮),分别用三种方式实现翻10页,对比速度和稳定性
最后一句:翻页是采集流程的心脏。
先看URL规律,有规律用拼接法(最快);
没规律找按钮,用按钮判断法(最稳);
按钮也没有,那就是无限滚动,用滚动加载法(最复杂但最真实)。
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
