
影刀RPA进阶教程网页动态加载数据的抓取策略——Ajax、懒加载与无限滚动有些网页的商品列表不是一次全部加载的你滚动到底部它才去请求服务器加载更多。你的自动化流程只取了第一屏的数据页面其实有十几屏但你没抓到。因为标准流程不知道页面是懒加载的。一、先判断页面用的是哪种加载方式加载方式特征检测方法传统分页页面底部有1 2 3 … 下一页直接看页面无限滚动滚到底自动加载更多没有分页器滚到底看页面高度是否变长点击加载更多有个查看更多按钮查页面有无这个按钮Ajax动态刷新点筛选条件后局部刷新不整页跳转看URL变不变二、无限滚动的处理最常见小红书、抖音、微博等平台都用这种。店群矩阵自动化突破运营极限核心思路不用做翻页。改滚动。# 方案1用JS滚动上次高度0当前高度获取当前页面高度()采集数据[]最大滚动次数50# 防无限循环滚动次数0条件循环(当前高度上次高度 且 滚动次数最大滚动次数):上次高度当前高度# 滚动到页面底部Python代码:driver.execute_script(window.scrollTo(0, document.body.scrollHeight);)# 等待新数据加载固定等待(2秒)# 把当前页面的商品都取了获取相似元素列表(商品卡片)-新卡片 遍历列表(新卡片,卡片):数据提取商品信息(卡片)如果 数据 不在 采集数据 中:# 去重采集数据.append(数据)输出日志(f已采集{len(采集数据)}条)# 更新高度当前高度获取当前页面高度()滚动次数1关键用页面高度是否还在增加作为是否滚到底的判断。高度不增加了说明数据加载完了。三、点击加载更多的处理比无限滚动简单加载次数0最大加载30条件循环(True):判断元素是否存在(加载更多按钮)-有按钮 如果不满足 有按钮:输出日志(没有更多了)跳出循环 如果 加载次数最大加载:输出日志(达到最大加载次数)跳出循环 点击元素(加载更多按钮)固定等待(3秒)# 等新数据加载加载次数1四、Ajax请求拦截进阶方案有些页面滚动后会发Ajax请求获取JSON数据。直接拦截这个JSON比解析HTML高效得多。在浏览器里查看Ajax请求F12 → Network → XHR标签 → 滚动页面 → 看哪些请求返回了数据。很多接口会直接返回结构化的JSON{code:0,data:{items:[{id:123,title:商品A,price:128},...],hasMore:true,nextCursor:abc123}}在影刀里模拟Ajax请求拿到接口URL后直接在影刀里发HTTP请求temu店群自动化报活动案例# 不需要滚动页面直接调接口cursorhas_moreTrue采集数据[]条件循环(has_more):URLfhttps://api.example.com/feed?cursor{cursor}count50HTTP请求(GET,URL)-响应 data响应.json()itemsdata[data][items]采集数据.extend(items)has_moredata[data][hasMore]cursordata[data][nextCursor]输出日志(f已采集{len(采集数据)}条)固定等待(1秒)# 接口调用间隔这样比页面滚动快得多而且不需要和DOM打交道。五、动态筛选的处理有些店铺后台的筛选条件点完后数据是Ajax刷新的URL不变。# 选择筛选条件点击元素(日期筛选_今天)# 不要等页面跳转等数据区域刷新# 因为URL不变不能用等待元素出现元素本来就在# 用JS监听DOM变化Python代码:fromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver.common.byimportBy# 等表格行变化old_rowslen(driver.find_elements(By.CSS_SELECTOR,.table-row))# 等新行出现WebDriverWait(driver,10).until(lambdad:len(d.find_elements(By.CSS_SELECTOR,.table-row))!old_rows)六、通用适配策略defsmart_collection():自动判断页面类型并采取对应的采集策略# 检测1有分页按钮吗如果 元素存在(页码器):使用分页模式采集()# 检测2有加载更多按钮吗否则如果 元素存在(加载更多按钮):使用点击加载模式()# 检测3滚动后页面高度变化吗否则:使用无限滚动采集()你的采集流程不需要预先知道页面是什么类型让它自己判断。作者林焱本文为《影刀RPA学习手册》系列文章之一内容源于实操经验的整理与分享。