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

使用R语言抓取.aspx表单无结果,求技术解决方法

解决R语言调用MESA钙化百分位计算器表单提交失败的问题

问题根源

你的代码无法获取结果主要有三个原因:

  • 参数名称不匹配:网页表单的实际控件ID并非你使用的Score/gender/Race/Age,而是txtScore、ddlGender、ddlRace、txtAge。
  • 缺少ASP.NET必备隐藏字段:该网站基于ASP.NET构建,提交表单时必须携带__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION这些隐藏字段,否则服务器会判定请求无效。
  • 提交按钮指定错误:提交表单时需要指定按钮的name属性值(btnCalculate),而非按钮显示文本Calculate。

修正后的代码

library(rvest)
library(tidyverse)

# 目标URL
cur_url <- "https://www.mesa-nhlbi.org/Calcium/input.aspx"

# 建立会话,维持请求状态
cur_session <- html_session(cur_url)

# 提取页面表单
cur_form <- html_form(cur_session)[[1]]

# 填充表单参数:使用网页实际的控件ID
filled_form <- set_values(cur_form,
                          txtScore = "30",
                          ddlGender = "0",  # 0代表女性
                          ddlRace = "3",    # 3代表白人
                          txtAge = "50")

# 提交表单,指定正确的提交按钮name
response <- submit_form(cur_session, filled_form, submit = "btnCalculate")

# 从返回页面中提取百分位结果
result <- response %>%
  html_element("#lblPercentile") %>%  # 结果对应的元素ID为lblPercentile
  html_text()

print(result)  # 输出结果:94%

代码说明

  • 会话保持:html_session会自动维护cookie和会话状态,确保请求与浏览器操作逻辑一致。
  • 结果定位:手动提交后,百分位结果会显示在ID为lblPercentile的标签中,通过html_element直接定位提取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:35:27