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

如何在R中模拟点击网站按钮实现搜索并下载Excel文件?

在R语言中实现EnviroTox Database的搜索与Excel下载

问题描述

需要在R语言中模拟以下操作:

  1. 访问https://envirotoxdatabase.org,点击「Search」按钮完成搜索
  2. 点击「Download as Excel File」按钮下载搜索结果文件
    查看网页HTML后发现下载按钮对应的<form>标签关联了Python后端脚本,尝试使用httr::POST实现但未成功,原有尝试代码如下:
qurl = 'https://envirotoxdatabase.org'
fl = 'test.xlsx'

res = httr::POST(
  qurl,
  body = list(id = 'a2downloadform',
              action = 'https://envirotoxdatabase.org/index.php/home/downloadExcelPython',
              class = 'pull-right'),
  httr::write_disk(fl, overwrite = TRUE),
  encode = 'form'
)

解决方案

原有代码的核心问题是:POST目标URL错误、表单参数不完整,且未维持搜索与下载的会话关联。以下是修正后的实现步骤:

1. 核心要点

  • 必须维持会话状态:搜索结果与下载请求绑定,需用httr::handle保留会话信息
  • 完整获取表单参数:下载表单包含隐藏字段(如CSRF令牌、搜索会话ID),需从网页中解析提取
  • 先执行搜索请求,确保会话中存在有效搜索状态后再触发下载

2. 完整实现代码

library(httr)
library(rvest)

# 初始化会话,维持访问状态
session <- handle("https://envirotoxdatabase.org")

# 第一步:执行搜索请求(替换为你的搜索关键词)
search_params <- list(
  query = "your_search_keyword"  # 这里填写实际要搜索的内容
)

search_response <- POST(
  url = "https://envirotoxdatabase.org/index.php/home/search",
  handle = session,
  body = search_params,
  encode = "form"
)

# 第二步:解析页面获取下载表单的完整参数
page_content <- read_html(search_response)
# 定位到ID为a2downloadform的下载表单
download_form <- html_form(page_content) %>%
  purrr::keep(~ .x$attrs$id == "a2downloadform") %>%
  purrr::pluck(1)

# 提取表单所有字段的参数值
form_body <- lapply(download_form$fields, function(field) field$value)

# 第三步:触发Excel下载
output_file <- "test.xlsx"
download_response <- POST(
  url = download_form$url,
  handle = session,
  body = form_body,
  write_disk(output_file, overwrite = TRUE),
  encode = "form"
)

# 检查下载结果
if (http_status(download_response)$category == "Success") {
  cat("文件下载成功,路径:", normalizePath(output_file), "\n")
} else {
  cat("下载失败,状态码:", http_status(download_response)$status_code, "\n")
}

3. 关键说明

  • 搜索请求的URL和参数需根据网页实际的搜索表单调整:可以用浏览器开发者工具(F12)查看搜索按钮提交的请求详情,确认目标URL和参数名
  • 如果搜索是GET请求(而非POST),则将POST改为GET,并将参数放在query参数中而非body
  • 使用rvest解析表单能自动获取所有隐藏字段,避免手动构造参数出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:38:11