You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RSelenium获取assist.org下拉菜单值返回空数据框如何解决

问题原因
  • 目标站点的页面元素为客户端动态渲染+懒加载模式,固定等待2秒无法保证academicYear下拉框元素完成渲染
  • 直接抓取页面源码转XML解析的方式,容易因DOM未完全生成导致匹配不到对应节点
修复后可运行代码
library(tidyverse)
library(RSelenium)

# 启动驱动,注意将chromever参数替换为本地Chrome浏览器对应的版本
rD <- rsDriver(browser = "chrome",
               verbose = TRUE,
               chromever = "91.0.4472.101")
remDr <- rD[["client"]]

remDr$navigate("https://assist.org/")

# 显式等待函数:指定时间内轮询查找目标元素,避免固定等待时长不足的问题
wait_element <- function(remDr, by, value, timeout = 10) {
  webElem <- NULL
  start_time <- Sys.time()
  while(is.null(webElem) && as.numeric(Sys.time() - start_time) < timeout) {
    try({
      webElem <- remDr$findElement(using = by, value = value)
    }, silent = TRUE)
    Sys.sleep(0.5)
  }
  return(webElem)
}

# 等待学年下拉框加载完成
year_dropdown <- wait_element(remDr, by = "xpath", value = '//select[@id="academicYear"]')

# 直接通过RSelenium提取下拉框的option子节点
option_elements <- year_dropdown$findChildElements(using = "xpath", value = "./option")

# 提取value属性和显示文本生成结果表
DropDownOptions <- map_dfr(option_elements, function(x) {
  data.frame(
    ID = x$getElementAttribute("value")[[1]],
    Name = x$getElementText()[[1]]
  )
})

print(DropDownOptions)

# 操作完成后关闭驱动,避免残留进程占用资源
remDr$close()
rD$server$stop()
关键修改说明
  • 替换固定等待逻辑为显式等待,适配不同网络环境下的页面加载速度波动,确保元素渲染完成后再执行后续操作
  • 直接通过RSelenium的元素查找接口获取节点,无需转XML解析,适配动态生成的DOM结构
  • 新增进程关闭逻辑,避免后台残留Chrome进程占用系统资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:45:01