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

如何用Python向ASP.NET WebForm发送AJAX请求以替代Selenium

用Python模拟ASP.NET回发请求替代Selenium操作

当然可以用Python直接发送请求替代Selenium,速度会快很多——毕竟不用启动浏览器、渲染页面。这个按钮是ASP.NET的WebForm_DoPostBack回发按钮,只要模拟它的请求逻辑就行。

先分析按钮的回发逻辑

按钮的onclick事件里,WebForm_PostBackOptions的关键参数:

  • 触发回发的控件ID:ctl00$MainContent$btnSearch
  • 验证组:chkNumbers
  • 其他参数说明这是同步回发(本质还是POST请求,我们可以直接模拟)

实现步骤

ASP.NET回发需要几个核心隐藏字段和表单数据,按以下步骤操作:

  1. 先获取页面的会话信息和隐藏字段
    先GET目标页面,拿到Cookie和ASP.NET生成的__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION这几个隐藏字段,这些是页面验证和会话维持的关键。

  2. 构造POST请求的表单数据
    除了上面的隐藏字段,还要加上回发的目标控件ID、验证组,以及页面上其他需要提交的表单字段(比如搜索框内容、复选框状态等)。

  3. 发送POST请求并处理结果
    用Session维持会话,发送POST请求后解析返回的HTML获取数据。

示例代码

先安装依赖:

pip install requests beautifulsoup4

然后编写代码:

import requests
from bs4 import BeautifulSoup

# 替换成目标页面的实际URL
target_url = "https://你的目标页面地址"

# 初始化会话,维持Cookie
session = requests.Session()

# 第一步:获取页面的隐藏字段和会话Cookie
page_response = session.get(target_url)
soup = BeautifulSoup(page_response.text, "html.parser")

# 提取ASP.NET核心隐藏字段
view_state = soup.find("input", id="__VIEWSTATE")["value"]
view_state_generator = soup.find("input", id="__VIEWSTATEGENERATOR")["value"]
event_validation = soup.find("input", id="__EVENTVALIDATION")["value"]

# 构造POST表单数据
form_data = {
    "__VIEWSTATE": view_state,
    "__VIEWSTATEGENERATOR": view_state_generator,
    "__EVENTVALIDATION": event_validation,
    "__EVENTTARGET": "ctl00$MainContent$btnSearch",  # 触发回发的按钮ID
    "__EVENTARGUMENT": "",  # 回发参数,这里为空
    "__VALIDATIONGROUP": "chkNumbers",  # 对应按钮指定的验证组
    # 这里补充页面上其他需要提交的表单字段,比如搜索框:
    # "ctl00$MainContent$txtSearch": "你的搜索关键词"
    # 如果有复选框,比如chkNumbers对应的控件,也要加上它的name和value
}

# 第二步:发送POST请求模拟点击Find按钮
result_response = session.post(target_url, data=form_data)

# 第三步:解析返回的结果
result_soup = BeautifulSoup(result_response.text, "html.parser")
# 替换成你需要提取的数据选择器
search_results = result_soup.find_all("div", class_="search-result-item")
for item in search_results:
    print(item.get_text(strip=True))

注意事项

  • 一定要用requests.Session()维持会话,ASP.NET靠Cookie识别用户会话,不然会验证失败。
  • 表单数据要和浏览器实际提交的一致:可以打开浏览器开发者工具(Network标签),点击Find按钮后查看POST请求的Form Data,把所有字段都加到form_data里。
  • 如果页面有JS动态生成的内容,可能需要额外处理,但大部分ASP.NET页面的核心字段都是静态生成的,直接提取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:50:19