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

使用R爬取网页时遇length(url)==1 is not TRUE错误求助

解决方案

错误根源

报错核心原因是你把URL存储在列表中,而remDrv$navigate()要求传入单个字符串。循环时每个url是列表的一个元素(类型为列表),不是纯字符串,导致函数判断length(url)不等于1,触发错误。另外原代码生成URL的方式冗余,还缺少页面加载等待逻辑,容易出现找不到下载按钮的问题。

修复后的代码

library(RSelenium)

download_senamhi_data <- function(url_vec) {
  # 生成随机端口
  port <- as.integer(runif(1, min = 5000, max = 6000))
  
  # 启动Chrome驱动,注意chromever要匹配本地Chrome版本
  # 若不确定版本,可尝试chromever = NULL自动匹配
  rD <- rsDriver(port = port, browser = "chrome", 
                 chromever = "101.0.4951.15")
  remDrv <- rD$client
  
  # 配置自动下载路径(避免弹窗,可选)
  download_dir <- file.path(getwd(), "senamhi_downloads")
  dir.create(download_dir, showWarnings = FALSE)
  chrome_prefs <- list(
    chromeOptions = list(
      prefs = list(
        "download.default_directory" = download_dir,
        "download.prompt_for_download" = FALSE,
        "download.directory_upgrade" = TRUE
      )
    )
  )
  remDrv$setTimeout(type = "page load", milliseconds = 10000)
  
  for (url in url_vec) {
    # 访问目标URL
    remDrv$navigate(url)
    
    # 等待页面加载完成(避免未渲染就查找元素)
    Sys.sleep(2)
    
    # 查找并点击下载按钮
    down_btn <- remDrv$findElement(using = "id", value = "export2")
    down_btn$clickElement()
    
    # 等待下载完成
    Sys.sleep(3)
  }
  
  # 清理会话
  remDrv$close()
  rD$server$stop()
  rm(rD, remDrv)
  gc()
}

# 生成2021年1-12月的URL向量(用sprintf简化生成逻辑)
list_url <- sprintf(
  "https://www.senamhi.gob.pe/mapas/mapa-estaciones-2/_dato_esta_tipo02.php?estaciones=109045&CBOfiltro=2021%02d&t_e=M&estado=DIFERIDO&cod_old=154107&cate_esta=PLU&alt=2266",
  1:12
)

# 执行下载
download_senamhi_data(list_url)

关键修复点

  1. URL存储改为字符向量:用sprintf一次性生成所有月份的URL,既简洁又避免列表类型错误。
  2. 添加等待逻辑:页面和元素需要时间渲染,用Sys.sleep()防止找不到下载按钮;也可以用更智能的等待函数(如waiter包的wait_for)。
  3. 可选配置下载路径:自动指定文件夹保存下载文件,避免浏览器弹窗干扰。
  4. 匹配ChromeDriver版本:确保chromever参数与本地Chrome版本一致,否则驱动无法启动;不确定版本时可设为NULL尝试自动匹配。

内容的提问来源于stack exchange,提问作者César Carvallo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:15:53