抖音和TikTok Shop的商品列表,是无限滚动加载的。
你往下滚,它才加载新数据。不滚动,永远只看到前20个。更麻烦的是,class名带随机哈希,今天写的XPath明天就失效。
我用影刀RPA做TikTok Shop采集时,光滚动加载就调了一整天。
下面把无限滚动的处理方式和防限流策略一次讲清楚。
抖音/TikTok无限滚动加载的触发机制
场景:打开TikTok Shop商品页,只显示20个商品,往下滚才加载更多。
方法:用“滚动页面”指令触发加载,配合“等待元素出现”确认新数据。
操作步骤:
- 在右侧指令面板搜索“滚动页面”,拖入流程
2. 滚动方式选“滚动到页面底部”
- 加“等待元素出现”,捕获商品列表最后一个商品
- 设置超时10秒,元素出现说明新数据加载完成
# 捕获元素:TikTok Shop商品列表最后一项
//div[contains(@class,'product-list')]//div[contains(@class,'item')][last()]

# 等待这个元素出现,说明滚动加载完成
# 影刀RPA的“等待元素出现”指令,超时10秒
注意:TikTok Shop滚动后不会立刻加载,通常有1~2秒延迟。加“等待时间”2秒更稳。
循环滚动与防死循环的循环条件设置
场景:不确定要滚多少次才能加载完所有商品。
方法:用“循环条件”指令,判断“加载更多”按钮或底部提示是否存在。
操作步骤:
- 拖入“循环条件”指令,条件设为“判断元素是否存在”
- 捕获“加载更多”按钮或“没有更多”提示
- 循环体内先滚动,再等待,再判断
- 设置最大循环次数50次,防止死循环
# 捕获元素:TikTok Shop“加载更多”按钮
//*[contains(text(),'加载更多') or contains(text(),'Load more')]
# 捕获元素:TikTok Shop“没有更多”提示
//*[contains(text(),'没有更多') or contains(text(),'No more')]
# 循环条件:判断“加载更多”是否存在
# 如果存在,继续滚动;如果不存在,退出循环
重点:TikTok Shop有时会显示“没有更多”,有时直接不显示任何提示。用“加载更多”是否存在来判断更准。
动态class哈希的XPath模糊匹配技巧
场景:TikTok Shop的class名带随机哈希,比如item-abc123,每次刷新都变。
方法:用contains()函数匹配固定前缀或后缀。
# 捕获元素:TikTok Shop商品标题(class带随机哈希)
//*[contains(@class,'product-title')]
# 捕获元素:商品价格(class含price)
//*[contains(@class,'price')]
# 捕获元素:商品链接(通过href包含/product/定位)
//a[contains(@href,'/product/')]
# 用“获取相似元素列表”指令,一次性拿到所有商品标题
# 输出变量:title_list,再循环遍历写入表格
避坑:不要用绝对路径。TikTok Shop的DOM结构经常变,用属性模糊匹配最稳。
防限流策略:等待时间与代理轮换
场景:连续滚动几十次后,TikTok Shop弹出验证或直接加载失败。
方法:控制滚动频率,配合代理IP轮换。
- 每次滚动后加“等待时间”3~5秒
- 每采集50个商品,切换一次代理IP
- 翻页用“循环条件”判断“加载更多”按钮
- 设置最大页数50页,防止死循环
| 策略 | 设置 | 作用 |
|---|---|---|
| 滚动间隔 | 3~5秒 | 避免请求过快 |
| 代理轮换 | 每50条 | 避免IP被限 |
| 最大滚动 | 50次 | 防止死循环 |
| 异常重试 | 3次 | 网络波动容错 |
# 捕获元素:TikTok Shop商品列表项(用于采集)
//div[contains(@class,'product-list')]//div[contains(@class,'item')]
# 每次滚动后,用“获取相似元素列表”重新抓取
# 注意去重:用商品ID判断是否已采集
//div[contains(@class,'item')]//a[contains(@href,'/product/')]/@href
实测:TikTok Shop比抖音国内版更敏感,建议滚动间隔不低于3秒。
数据去重与写入Excel的完整流程
场景:滚动加载时,有时会重复加载同一批商品。
方法:用商品链接或商品ID去重,再写入Excel。
操作步骤:
- 用“获取相似元素列表”拿到所有商品链接
- 循环遍历,用“判断元素是否存在”检查是否已采集
- 已采集的跳过,未采集的写入表格
- 用“写入行数据到表格”追加数据
- 循环结束后“保存Excel”
# 影刀Python指令:按商品链接去重
import pandas as pd
df = pd.read_excel('TikTok商品数据.xlsx')
df = df.drop_duplicates(subset=['商品链接'], keep='first')
df.to_excel('TikTok商品数据_去重后.xlsx', index=False)
注意:社区版30分钟/天,滚动采集容易超时。建议用创业版跑完整流程。
常见问题速查
| 问题 | 原因 | 解决 |
|---|---|---|
| 滚动后不加载 | 页面未到底部 | 用“滚动到页面底部” |
| 元素定位失败 | class哈希变了 | 用contains模糊匹配 |
| 采集到重复数据 | 滚动位置没变 | 按商品链接去重 |
| 弹出验证码 | 请求太频繁 | 加等待+代理轮换 |
| 社区版额度不够 | 30分钟/天 | 创业版无限制 |
Q:魔法指令能生成TikTok采集流程吗?
A:影刀3.0的魔法指令可以生成框架,但无限滚动和去重要手动调。
Q:TikTok和抖音国内版的采集有什么区别?
A:TikTok Shop的登录态和网络环境更复杂,建议单独配置浏览器Profile和代理。
推荐资源
- 影刀RPA官方学院“跨境电商自动化”专题课,免费
- 影刀社区搜索“TikTok采集”,有现成模板可下载
- Chrome插件XPath Helper,实时验证TikTok的XPath
#影刀RPA #RPA自动化 #TikTokShop #抖音采集 #无限滚动 #防限流
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。
