影刀RPA 网页翻页全攻略:页码与加载更多
影刀RPA 网页翻页全攻略页码与加载更多作者林焱什么情况用什么采集列表数据时一页只有20条总共几百上千条需要翻页。不同网站的翻页方式不同——有传统的页码点击翻页、有加载更多按钮、有无限滚动。在影刀RPA里需要根据不同翻页方式选择对应策略并且要正确判断什么时候该停止。适用场景电商商品列表翻页采集、新闻列表分页采集、搜索结果分页采集、任何需要翻页的列表数据采集。怎么做方式一页码翻页拼多多店群自动化报活动上架【打开网页】→ 第1页URL 【循环】 【提取数据】→ 当前页数据 【判断元素是否存在】→ 下一页按钮 存在 → 【点击元素】下一页 → 【等待页面加载】 不存在 → 【退出循环】影刀RPA中的操作# 用影刀可视化指令的伪流程# 1. 【打开网页】 https://example.com/list?page1# 2. 【循环】while True# 3. 【提取相似元素数据】→ 当前页列表数据# 4. 【判断元素是否存在】→ .next-page:not(.disabled)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8feb5ced37e04304af10dc9bb3e2287b.png#pic_center)# 5. True → 【点击元素】→ .next-page# 6. False → break# 7. 【等待元素出现】→ .list-item 确保新页加载完用Python实现importrequestsfrombs4importBeautifulSoupimporttimedefscrape_with_pagination(base_url,max_pages50):页码翻页采集all_data[]forpageinrange(1,max_pages1):urlf{base_url}?page{page}responserequests.get(url,headersheaders,timeout10)soupBeautifulSoup(response.text,html.parser)# 提取当前页数据itemssoup.select(.list-item)ifnotitems:print(f第{page}页无数据停止)breakforiteminitems:data{标题:safe_text(item.select_one(.title)),价格:safe_text(item.select_one(.price)),}all_data.append(data)print(f第{page}页{len(items)}条累计{len(all_data)}条)# 检查是否有下一页next_btnsoup.select_one(.next-page:not(.disabled))ifnotnext_btn:print(没有下一页停止)breaktime.sleep(1)returnall_data方式二加载更多按钮defscrape_with_load_more(url,max_clicks50):加载更多按钮翻页# 在影刀中需要用浏览器自动化# 因为加载更多是JS动态追加内容all_data[]forclick_countinrange(max_clicks):# 1. 提取当前页面数据# 影刀指令【提取相似元素数据】current_dataextract_current_page_data()all_data.extend(current_data)# 2. 查找加载更多按钮# 影刀指令【判断元素是否存在】load_morecheck_element_exists(.load-more-btn)ifnotload_more:print(f第{click_count1}次无加载更多按钮停止)break![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1db4d35a6247424fa3db2ea544f29974.png#pic_center)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7e3d8bf5b58449859fe3266fe68bb633.png#pic_center)# 3. 点击加载更多# 影刀指令【点击元素】→ .load-more-btnclick_element(.load-more-btn)# 4. 等待新内容加载# 影刀指令【等待元素出现】→ .list-item:last-childtime.sleep(2)# 5. 检查是否有新数据new_dataextract_current_page_data()iflen(new_data)len(all_data):print(f第{click_count1}次无新数据停止)breakprint(f第{click_count1}次点击累计{len(all_data)}条)returnall_data方式三无限滚动defscrape_infinite_scroll(url,max_scrolls100):无限滚动采集all_data[]last_count0no_change_count0forscroll_numinrange(max_scrolls):# 1. 滚动到底部# 影刀指令【执行JavaScript代码】js_scrollwindow.scrollTo(0, document.body.scrollHeight);execute_js(js_scroll)# 2. 等待加载time.sleep(2)# 3. 提取当前数据current_dataextract_current_page_data()all_datacurrent_data# 页面上所有数据# 4. 检查是否有新数据iflen(all_data)last_count:no_change_count1ifno_change_count3:print(f连续3次无新数据停止)breakelse:no_change_count0last_countlen(all_data)print(f第{scroll_num1}次滚动共{len(all_data)}条)returnall_data通用翻页框架importpandasaspdimporttimeimportrandomclassWebScraper:通用翻页采集框架def__init__(self,namescraper):self.namename self.all_data[]self.output_fileNonedefscrape_page(self,page_num):采集单页子类实现raiseNotImplementedErrordefhas_next_page(self,page_num):判断是否有下一页子类实现raiseNotImplementedErrordefrun(self,max_pages50,delay_range(1,3),output_fileNone):执行采集self.output_fileoutput_fileforpageinrange(1,max_pages1):try:dataself.scrape_page(page)ifnotdata:print(f[{self.name}] 第{page}页无数据停止)breakself.all_data.extend(data)print(f[{self.name}] 第{page}页:{len(data)}条, 累计{len(self.all_data)}条)# 定期保存ifoutput_fileandpage%50:self.save(output_file)ifnotself.has_next_page(page):print(f[{self.name}] 没有下一页停止)break# 随机延迟delayrandom.uniform(*delay_range)time.sleep(delay)exceptExceptionase:print(f[{self.name}] 第{page}页出错:{e})# 出错后等待更久time.sleep(5)continueifoutput_file:self.save(output_file)returnself.all_datadefsave(self,filepath):保存数据dfpd.DataFrame(self.all_data)df.to_excel(filepath,indexFalse)print(f[{self.name}] 已保存{len(df)}条到{filepath})# 使用示例classProductScraper(WebScraper):def__init__(self,base_url):super().__init__(ProductScraper)self.base_urlbase_url self.headers{User-Agent:Mozilla/5.0...}defscrape_page(self,page_num):urlf{self.base_url}?page{page_num}responserequests.get(url,headersself.headers,timeout10)soupBeautifulSoup(response.text,html.parser)itemssoup.select(.product-item)return[{标题:safe_text(i.select_one(.title)),价格:safe_text(i.select_one(.price))}foriinitems]defhas_next_page(self,page_num):urlf{self.base_url}?page{page_num1}responserequests.get(url,headersself.headers,timeout10)soupBeautifulSoup(response.text,html.parser)returnbool(soup.select(.product-item))# 使用scraperProductScraper(https://example.com/products)scraper.run(max_pages20,output_filerC:\Data\products.xlsx)有什么坑坑1翻页后数据重复TEMU店群矩阵自动化运营核价报活动点击下一页后URL变了但页面内容没刷新导致采集到重复数据# 解决等待URL变化等待新内容出现# 影刀中# 【点击元素】下一页# 【等待URL变化】→ 等待URL包含?page2# 【等待元素出现】→ .list-item# 【等待】1秒额外等待渲染# 或者用数据去重seen_idsset()foritemindata:item_iditem.get(ID)ifitem_idanditem_idinseen_ids:continueseen_ids.add(item_id)all_data.append(item)坑2下一页按钮disabled状态判断错误# 问题下一页按钮一直存在但最后一页时class变成disabled# 如果只判断按钮是否存在永远不停# 错误ifsoup.select_one(.next-page):# 一直为Truecontinue# 死循环# 正确检查disabled状态next_btnsoup.select_one(.next-page:not(.disabled))![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/efae03f6ba334421ad1c9f00afa9ecbb.png#pic_center)# 或next_btnsoup.select_one(.next-page)ifnext_btnanddisablednotinnext_btn.get(class,[]):continueelse:break坑3AJAX翻页URL不变有些网站翻页不改变URL只是JS动态加载# 解决找到AJAX接口# F12 → Network → 点击下一页 → 找到XHR请求# 直接请求APIapi_urlfhttps://example.com/api/list?page{page}size20responserequests.get(api_url,headersheaders)dataresponse.json()itemsdata.get(data,data.get(list,[]))坑4翻页速度太快被限制# 解决随机延迟 模拟人类行为importrandom# 随机1-3秒延迟delayrandom.uniform(1,3)time.sleep(delay)# 偶尔长暂停模拟人离开ifrandom.random()0.1:# 10%概率long_pauserandom.uniform(5,10)print(f模拟休息{long_pause:.1f}秒...)time.sleep(long_pause)坑5总页数未知导致无法预估进度# 解决先查看是否有总页数信息total_pagessoup.select_one(.total-pages)iftotal_pages:totalint(total_pages.get_text(stripTrue))print(f总共{total}页)else:print(总页数未知将持续采集直到无数据)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/437b165dbeab424e89e54740e15e7024.png#pic_center)# 或者先快速请求最后一页# 很多网站URL支持?page99999自动跳转到最后一页test_urlf{base_url}?page99999responserequests.get(test_url)# 从返回的URL或页面中获取真实总页数

相关新闻

Workflow 与 Agent 到底有什么区别?—— 从流水线到智能体的全面解析

Workflow 与 Agent 到底有什么区别?—— 从流水线到智能体的全面解析

文章目录一、从一个 Chain 说起二、AI Workflow 工作流:确定性执行的"智能流水线"2.1 什么是 Workflow?2.2 Coze 可视化工作流:拖拽式 AI 编排2.3 Workflow 的三大特征2.4 LangChain:Workflow 的开发框架三、举例&#…

2026/7/23 0:30:36阅读更多 →
基于TMS320DM642与THS8200的高清视频输出系统设计详解

基于TMS320DM642与THS8200的高清视频输出系统设计详解

1. 项目概述与核心价值在嵌入式视频处理领域,尤其是高清(HD)乃至早期全高清(FHD)视频的实时处理与输出系统中,数字信号处理器(DSP)与高性能视频数模转换器(DAC&#xff0…

2026/7/23 0:28:35阅读更多 →
嵌入式硬件设计:引脚复用技术解析与TM4C129XNCZAD实战指南

嵌入式硬件设计:引脚复用技术解析与TM4C129XNCZAD实战指南

1. 项目概述:从引脚表到设计蓝图如果你和我一样,在嵌入式硬件设计这条路上摸爬滚打多年,那么对着一张密密麻麻的微控制器引脚分配表,从最初的茫然到后来的会心一笑,这个过程想必都经历过。今天,我们不谈那些…

2026/7/23 0:28:35阅读更多 →
数码宝贝与假面骑士555跨IP动画创作技术解析

数码宝贝与假面骑士555跨IP动画创作技术解析

1. 项目背景与核心概念解析"数码宝贝X假面骑士555第三期"这个标题融合了两个经典IP的跨世界观联动创作。作为从业十余年的二次元内容创作者,我观察到这种跨IP同人创作在近年呈现爆发式增长。第三期的推出意味着前两季已经积累了一定粉丝基础,需…

2026/7/23 1:38:46阅读更多 →
智能报警系统优化:降噪与误报处理实战指南

智能报警系统优化:降噪与误报处理实战指南

1. 设备报警问题的困扰与解决思路上周三凌晨三点,我家里的烟雾报警器突然开始尖叫,全家人都被惊醒。慌乱中检查发现只是电池没电了,但睡意全无的体验让我意识到:设备报警本是为了安全,但误报和过度报警反而成了生活困扰…

2026/7/23 1:38:46阅读更多 →
【YOLO26 系列】基于YOLO26葡萄叶病害检测系统【python源码+Pyqt5界面/WEB+数据集+训练代码】

【YOLO26 系列】基于YOLO26葡萄叶病害检测系统【python源码+Pyqt5界面/WEB+数据集+训练代码】

基于YOLO26的葡萄叶病害检测系统 导读 本文基于YOLO26目标检测模型,开发了一套葡萄叶病害自动检测系统,可精准识别葡萄叶片4类常见病害状态。项目包含PyQt5 GUI桌面端与Flask Web网页端双实现,支持单张图片检测、文件夹批量检测、视频检测、…

2026/7/23 1:38:46阅读更多 →
WebSocket安全测试实战:漏洞挖掘与防御方案

WebSocket安全测试实战:漏洞挖掘与防御方案

1. WebSocket API安全测试概述WebSocket作为HTML5规范中的重要组成部分,已经广泛应用于实时通信场景。与传统HTTP协议不同,WebSocket建立的是持久化全双工连接,这种特性在带来高效实时交互的同时,也引入了独特的安全风险。在SRC&a…

2026/7/23 1:38:46阅读更多 →
Windows 11极限精简版实测:1.51G系统在老机器上的稳定性与兼容性验证

Windows 11极限精简版实测:1.51G系统在老机器上的稳定性与兼容性验证

这类精简版系统最值得先看的不是功能列表,而是能不能在普通机器上稳定跑起来,以及精简掉了哪些你可能需要的组件。我一般会从三个角度实测这类系统:安装过程、日常使用稳定性、以及精简带来的实际影响。下面按实际落地顺序拆一遍。1. 先确认这…

2026/7/23 1:38:46阅读更多 →
python:Backtracking Algorithm

python:Backtracking Algorithm

项目结构:# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Backtracking Algorithm # Author : geovindu,Geovin Du 涂聚文. # IDE …

2026/7/23 1:36:46阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/23 0:56:31阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/23 0:56:31阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 0:56:31阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →