.NET Core下如何自动填充并提交Web表单?
嘿,作为.NET Core新手想要实现Web表单自动填充和提交完全没问题!我给你整理了两种实用方案,针对你提供的两个测试地址,一步步来就能搞定:
核心思路与工具选择
首先得区分表单类型:
- 静态表单:页面加载后就能看到所有输入字段,用.NET Core自带的
HttpClient就能模拟提交,轻量高效。 - 动态表单:依赖JS渲染字段、做验证,或者需要模拟用户点击操作,这时候用
Selenium(浏览器自动化工具)更合适。
方案一:用HttpClient模拟静态表单提交
适合不需要JS交互的场景,步骤很简单:先通过浏览器F12抓包确认表单的提交地址和字段名,再构建请求发送。
针对第一个测试地址(mparivahan.in)的代码示例
using System.Net.Http; using System.Collections.Generic; using System.Threading.Tasks; public class FormSubmitHelper { private readonly HttpClient _httpClient; public FormSubmitHelper() { _httpClient = new HttpClient(); // 模拟浏览器请求头,避免被站点拦截 _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"); } public async Task SubmitMparivahanForm() { // 注意:这里的字段名是假设的,你需要用F12查看页面实际的表单字段name/ID var formData = new Dictionary<string, string> { { "regn_no", "MH1R" }, { "last_four_digits", "5656" } }; var formContent = new FormUrlEncodedContent(formData); // 提交地址可能和当前页面URL一致,也可能是另一个接口,需抓包确认 var response = await _httpClient.PostAsync("https://mparivahan.in/uyt/?pur_cd=102", formContent); if (response.IsSuccessStatusCode) { var result = await response.Content.ReadAsStringAsync(); Console.WriteLine("表单提交成功!返回内容:" + result); } else { Console.WriteLine($"提交失败,状态码:{response.StatusCode}"); } } }
针对第二个测试地址(filegstrstnow.com)的代码示例
public async Task SubmitGstForm() { // 同样,字段名需要你实际查看页面确认,这里假设是"gstin" var formData = new Dictionary<string, string> { { "gstin", "24AADCS0852Q1Z2" } }; var formContent = new FormUrlEncodedContent(formData); var response = await _httpClient.PostAsync("https://www.filegstrstnow.com/searchGSTTaxpayer", formContent); if (response.IsSuccessStatusCode) { var result = await response.Content.ReadAsStringAsync(); Console.WriteLine("GST表单提交成功!返回内容:" + result); } }
方案二:用Selenium处理动态表单
如果表单依赖JS加载,或者需要模拟点击、处理验证码(额外工具支持),Selenium能完全模拟浏览器操作。
先安装NuGet包
需要安装两个包:
Install-Package Selenium.WebDriver Install-Package Selenium.WebDriver.ChromeDriver
代码示例(针对两个测试地址)
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using System; public class SeleniumFormHandler { public void SubmitMparivahanWithBrowser() { // 初始化Chrome驱动,确保ChromeDriver版本和你的浏览器版本匹配 using var driver = new ChromeDriver(); driver.Navigate().GoToUrl("https://mparivahan.in/uyt/?pur_cd=102"); // 定位输入框并填充值,用Name/XPath/CSS选择器都可以,以页面实际元素为准 var regnInput = driver.FindElement(By.Name("regn_no")); regnInput.SendKeys("MH1R"); var lastFourInput = driver.FindElement(By.Name("last_four_digits")); lastFourInput.SendKeys("5656"); // 点击提交按钮 var submitBtn = driver.FindElement(By.XPath("//button[contains(text(), 'Submit')]")); submitBtn.Click(); // 等待页面加载,查看结果 Console.WriteLine("提交完成,当前页面标题:" + driver.Title); } public void SubmitGstWithBrowser() { using var driver = new ChromeDriver(); driver.Navigate().GoToUrl("https://www.filegstrstnow.com/searchGSTTaxpayer"); var gstinInput = driver.FindElement(By.Id("gstin")); // 假设ID是gstin gstinInput.SendKeys("24AADCS0852Q1Z2"); var submitBtn = driver.FindElement(By.CssSelector("button[type='submit']")); submitBtn.Click(); Console.WriteLine("GST表单提交完成,当前页面标题:" + driver.Title); } }
关键注意事项
- 确认表单字段名:一定要用浏览器F12查看页面的实际表单元素(Name/ID/XPath),示例里的字段名是假设的,实际可能不同。
- 反爬机制处理:有些站点会校验User-Agent、Cookie或验证码,HttpClient需要保持Cookie容器,Selenium可以模拟真实浏览器行为降低拦截概率。
- Selenium驱动版本:ChromeDriver版本必须和你的Chrome浏览器版本匹配,否则会报错。
内容的提问来源于stack exchange,提问作者N P
相关产品推荐
相关产品推荐

