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

使用Jsoup对ASPX站点发送POST请求爬取时无法获取筛选后页面

解决Jsoup爬取筛选后页面失败的问题

嘿,我来帮你搞定这个头疼的问题!你现在用Jsoup只拿到默认页面,大概率是没处理好ASP.NET页面的表单提交逻辑,我给你一步步拆解解决办法:

  • 别用get(),改用post()提交表单
    你当前的代码用的是.get(),但这类带筛选器的ASP.NET页面,筛选操作几乎都是通过POST请求提交表单参数的,默认页面是GET加载的,所以直接get()肯定拿不到筛选后的内容。

  • 必须带上ASP.NET的隐藏字段
    ASP.NET页面会生成几个关键的隐藏字段(比如__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION),这些字段是服务器验证请求合法性的关键,必须从初始页面提取后,在POST请求里一起提交。

    先写获取初始页面和隐藏字段的代码:

    // 先请求初始页面,拿到必要的隐藏字段和Cookie
    Connection.Response initialResponse = Jsoup.connect("http://45.114.246.184/bsmm/Dashboards/DB.aspx")
            .timeout(50*1000)
            .execute();
    Document doc = initialResponse.parse();
    
    // 提取ASP.NET的核心隐藏字段(注意选择器要和页面实际的ID匹配)
    String viewState = doc.select("#__VIEWSTATE").val();
    String viewStateGenerator = doc.select("#__VIEWSTATEGENERATOR").val();
    String eventValidation = doc.select("#__EVENTVALIDATION").val();
    
  • 构造POST请求,带上筛选参数和所有必要字段
    接下来要把筛选器对应的表单参数(比如下拉框、复选框的name和选中值)和上面的隐藏字段一起提交,还要带上初始请求的Cookie保持会话:

    // 构造POST请求,替换成你实际的筛选控件参数
    Document filteredDoc = Jsoup.connect("http://45.114.246.184/bsmm/Dashboards/DB.aspx")
            .cookies(initialResponse.cookies()) // 带上会话Cookie
            .data("__VIEWSTATE", viewState)
            .data("__VIEWSTATEGENERATOR", viewStateGenerator)
            .data("__EVENTVALIDATION", eventValidation)
            .data("你的筛选控件name", "选中的目标值") // 比如筛选下拉框name是ddlCategory,值是"2"
            // 如果有其他提交按钮的参数,比如btnSubmit的name和值也要带上
            .data("btnSubmit", "筛选")
            .post();
    
  • 关键:用浏览器开发者工具抓真实的提交参数
    如果你不确定筛选器对应的表单参数是什么,打开浏览器F12,进入「网络」标签,手动操作筛选器提交,找到对应的POST请求,查看「表单数据」里的所有键值对,把这些全部加到Jsoup的.data()里,一个都不能少!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:23:48