You need to enable JavaScript to run this app. 如何使用RSelenium向下滚动页面,直至加载全部新记录的页面完全加载
优惠活动
大模型
产品
解决方案
定价
更多

如何使用RSelenium向下滚动页面,直至加载全部新记录的页面完全加载

RSelenium实现页面全量滚动加载的方案

实现逻辑

  • 采用循环滚动检测机制:每次将页面滚动至可视区域最底端,预留动态加载等待时间,记录当前页面已加载的内容总量
  • 重复执行滚动操作,当连续两次滚动后,已加载的内容数量没有发生变化时,判定页面已加载完全部记录,终止循环

适配原有脚本的完整可运行代码

library(RSelenium)
rD <- RSelenium::rsDriver(browser = "firefox", check = FALSE)
remDr <- rD[["client"]]

# 原有页面操作流程
remDr$navigate("https://investmentpolicy.unctad.org/international-investment-agreements")
remDr$findElement("link text", "Advanced Search")$clickElement()
remDr$findElement("id", "search-button")$clickElement()

# 新增全量滚动加载逻辑
last_loaded_count <- 0
load_wait_time <- 3

while (TRUE) {
  # 全局滚动到页面最底部
  remDr$executeScript("window.scrollTo(0, document.body.scrollHeight);")
  # 等待页面动态加载新内容
  Sys.sleep(load_wait_time)
  
  # 统计当前已加载的表格记录数,可根据实际页面DOM结构调整CSS选择器
  loaded_rows <- remDr$findElements("css", "table tbody tr")
  current_loaded_count <- length(loaded_rows)
  
  # 连续两次加载数量无变化,说明已无新内容可加载
  if (current_loaded_count == last_loaded_count) {
    message("页面已加载全部记录,总条数:", current_loaded_count)
    break
  }
  
  last_loaded_count <- current_loaded_count
  message("当前已加载记录数:", current_loaded_count)
}

实操注意点

  • 优先用实际条目数判断加载完成状态,相比通过页面总高度变化判断的方式,这种逻辑不会受页面悬浮元素、固定导航栏影响,准确率更高
  • 加载等待时间可根据自身网络条件调整,网络较慢时可适当增大load_wait_time的数值,避免新内容还没渲染完成就触发结束判定
  • 如果列表区域是独立的固定高度滚动容器、而非绑定在全局页面滚动条上,需要调整滚动JS逻辑,定位到对应容器元素后执行容器内部的滚动操作,而非使用全局window.scrollTo

内容的提问来源于stack exchange,提问作者Mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 04:45:03