当前位置: 首页 > news >正文

影刀RPA 动态加载网页的稳定采集三策略

影刀RPA 动态加载网页的稳定采集三策略

作者:林焱

什么情况用这个

打开一个网页,数据是慢慢"长"出来的——先出骨架,然后一条条数据刷出来,有时候还要滚动才加载。你的【获取元素列表】在这一刻抓到了10条,下一刻可能就是50条。到底什么时候才算"加载完成"?什么时候开始采集最稳?

动态网页的采集,难点不在抓数据,在于判断时机。抓早了数据不全,抓晚了浪费时间。这篇文章给你三种稳定采集策略,覆盖Ajax、懒加载、虚拟滚动等所有动态加载场景。

怎么做

策略一:等待数据稳定(最常用)

核心思想:连续两次检测到的数据量相同,说明加载完毕。

defwait_for_data_stable(driver,selector,stable_count=2,max_wait=30):""" 等待数据量稳定 stable_count: 连续N次数量不变才算稳定 """last_count=0stable_times=0for_inrange(max_wait*2):elements=driver.find_elements(By.CSS_SELECTOR,selector)current_count=len(elements)ifcurrent_count==last_countandcurrent_count>0:stable_times+=1ifstable_times>=stable_count:returnelementselse:stable_times=0last_count=current_count time.sleep(0.5)returndriver.find_elements(By.CSS_SELECTOR,selector)# 超时了也返回

策略二:监听网络请求完成

更精确的做法——等Ajax请求全部完成:

defwait_for_ajax_complete(driver,timeout=15):"""等待所有Ajax请求完成(jQuery/XMLHttpRequest)"""# 注入Ajax监听driver.execute_script(""" window.__ajaxActive = 0; var origXHR = window.XMLHttpRequest.prototype; var origOpen = origXHR.open; var origSend = origXHR.send; origXHR.open = function() { this._active = true; return origOpen.apply(this, arguments); }; origXHR.send = function() { window.__ajaxActive++; this.addEventListener('loadend', function() { window.__ajaxActive--; }); return origSend.apply(this, arguments); }; """)# 等待活跃请求数降到0for_inrange(timeout*10):active=driver.execute_script("return window.__ajaxActive || 0")ifactive==0:time.sleep(0.3)# 确认一下active=driver.execute_script("return window.__ajaxActive || 0")ifactive==0:returnTruetime.sleep(0.1)returnFalse

策略三:MutationObserver监听DOM变化

最精确的方式——监听特定容器内的DOM变化:

defwait_for_dom_stable(driver,container_selector,idle_ms=500,timeout=15):""" 监听DOM变化,连续idle_ms毫秒没有新变化才算稳定 """driver.execute_script(f""" window.__domStable = false; window.__domTimer = null; var target = document.querySelector('{container_selector}'); if (!target) return; var observer = new MutationObserver(function() {{ window.__domStable = false; clearTimeout(window.__domTimer); window.__domTimer = setTimeout(function() {{ window.__domStable = true; }},{idle_ms}); }}); observer.observe(target, {{ childList: true, subtree: true }}); // 初始设置定时器 window.__domTimer = setTimeout(function() {{ window.__domStable = true; }},{idle_ms}); """)# 等待稳定标志for_inrange(timeout*10):stable=driver.execute_script("return window.__domStable")ifstable:returnTruetime.sleep(0.1)returnFalse

有什么坑

坑一:数据一直在变永远不会稳定

现象:实时更新的数据看板,数据一直在刷新,永远等不到"稳定"。

解决:设定最大等待时间,超时就按当前数据采集。或者用"采集前N条"策略,不等全部加载。

坑二:虚拟滚动的数据"看到才存在"

现象:DOM里只有可见区域的20条数据,上面的已经移除、下面的还没生成。

解决:边滚动边采集——滚一段、等加载、采集、记录位置、继续滚。

坑三:等待了Ajax但数据是WebSocket推的

现象:Ajax监听显示完成了,但数据还在通过WebSocket进来。

解决:这种情况下只能用策略一(等数据量稳定)或策略三(DOM变化监听)。


总结:三种策略的适用场景——绝大多数情况用策略一(等数据量稳定),Ajax频繁的页面用策略二(等网络请求完成),实时更新的看板用策略三(DOM监听)

http://www.jsqmd.com/news/1177360/

相关文章:

  • 2026宁波园区高新技术企业申报机构选择参考指南 - 起跑123
  • 2026年7月最新哈尔滨宇舶官方售后联系电话与客户服务中心网点地址 - 亨得利官方服务中心
  • Python财务数据清洗:量化投资中时间点处理与TTM计算实践
  • 2026 怎么判别宁波本地洁净工程公司的施工质量 - 起跑123
  • 2026年7月最新长沙封窗主流品牌全景梳理参考 - 起跑123
  • 2026最新六盘水本地漏水检测公司本地精选权威推荐:正规防水补漏公司优选口碑TOP5:卫生间/厨房/阳台/飘窗/地下室渗漏水维修师傅上门 - 即刻修防水
  • 2026年7月口碑好的宁波挑选新房精装设计公司有哪些实用技巧 - 起跑123
  • 美国队长三部曲:从体制符号到个人信念的逆向成长
  • 家庭装修时如何选购开关插座面板?
  • 亲身探访深圳欧米茄官方售后服务中心|全部网点地址与热线(2026年7月最新) - 欧米茄官方服务中心
  • 2026宠物竹鸡养殖基地有哪些 主流场地中立实测评测 - 起跑123
  • 屏障受损肌面膜哪家靠谱:蜜妙诗匠心专研 - MXyuyu
  • 2026创作者工具优选:6款长视频去水印小程序深度横评,合规免费无损工具首选白虎神器99.6高分登顶 - 互联网科技品牌测评
  • Java周刊2026W28 | Spring Boot 4.1、IntelliJ IDEA 2026.2、Jackson 7漏洞、ZGC十年回顾、Endive 1.0
  • python interpreter Python的GIL锁死你多线程?CPU密集任务跑得比单线程还慢,气炸了
  • 影刀RPA 医药行业自动化:药品信息采集与价格监控
  • Android Camera MIPI接口知识总结
  • [Django+深度学习]毕业设计:基于深度学习的酒店评论文本情感分析系统(全套源码+论文+PPT+视频)
  • 2026年7月最新佛山百达翡丽官方售后客户服务电话及线下网点地址 - 百达翡丽官方售后中心
  • 四款长视频无损去水印小程序实测 核心维度对比解析 - 互联网科技品牌测评
  • 2026年7月口碑好的宁波靠谱的新房精装设计公司哪家好 - 起跑123
  • Python后端开发秘籍大公开,客户端程序编写超震撼
  • 2026年亲测教程:手机上 PDF 怎么转成图片最省事 - 图片处理研究员
  • QuakeIV 多人def
  • 2026山东罗茨风机厂家综合实力排行参考名单发布 - 起跑123
  • 2026年7月浙江化学镍工厂选型参考与服务指南 - 起跑123
  • 2026年7月最新郑州宇舶官方售后客服中心地址电话及服务网点分布 - 亨得利官方服务中心
  • 2026 年新消息:和政值得关注的烧烤棚厂家哪家权威,揭秘:这套烧烤棚,让你的周末变成顶级美食派对 - 领域鉴赏官
  • ChatGPT FAQ自动生成进阶实战(覆盖意图识别偏差、多轮问答断层、语义漂移等8类长尾问题)
  • 2026年长沙最新莲湖建材市场石膏板主流品牌盘点 - 起跑123