程序自动化表单字段输入和网页结果检查

我正在尝试使用C#(可能使用WinForms)创建一个程序,该程序将在特定网站的表单字段中输入许可证号,并validation许可证号是否是当前有效的许可证。

我不确定从哪里开始,因为我甚至无法在网站的源代码中找到表单字段ID,并且不确定网站使用什么技术。

此外,该程序的目的是输入许可证号列表并返回每个许可证的名称和validation状态。 数据源是网站。

关于如何解决这个问题的任何信息都将非常感激,我是一名中级C#开发人员 – 主要在ASP.Net工作,但感觉Winforms可能更适合这个项目。

亲切的问候

您可以使用WebBrowser控件:

  1. 您可以使用webBrowser1.Navigate("url of site")加载页面
  2. 使用webBrowser1.Document.GetElementById("buttonid")在页面中查找元素也可以迭代webBrowser1.Document.Body.All HtmlElement并检查示例element.GetAttribute("value") == "some vaule"来查找它。
  3. 使用element.InnerText ="some value"element.SetAttribute("value", "some value")设置元素的element.SetAttribute("value", "some value")
  4. 通过调用表单提交或使用element.InvokeMember("method")单击其提交按钮来提交表单

例如,如果您浏览谷歌并查看页面源,您将看到搜索文本框的名称为“q”,并且包含搜索框的表单的名称为“f”,因此您可以编写此代码以自动搜索。

  1. 创建名为BrowserSample的表单。
  2. 从工具箱中,拖动WebBrowser并放在窗体上。
  3. Hanfdle Loadforms的事件并导航到谷歌。
  4. 处理webBrowser1 DocumentCompleted事件并找到f并找到q并设置q InnerText并调用f提交。 导航和文档加载完成后,将触发此事件。
  5. 在实际应用程序中添加所需的空检查。

码:

 private void BrowserSample_Load(object sender, EventArgs e) { this.webBrowser1.Navigate("https://www.google.com/"); } void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { //Because submitting f causes navigation //to pervent a loop, we check the url of navigation //and if it's different from google url, return if (e.Url.AbsoluteUri != "https://www.google.com/") return; var f = this.webBrowser1.Document.Body.All.GetElementsByName("f") .Cast() .FirstOrDefault(); var q = f.All.GetElementsByName("q") .Cast() .FirstOrDefault(); q.InnerText = "C# Webbrowser Control"; f.InvokeMember("submit"); } 

如果您执行该程序,它首先导航到谷歌,然后显示搜索结果:

在此处输入图像描述

在你的特殊情况下

由于网站使用ajax加载内容,因此您应该在DocumentCompleted延迟:

 async void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (e.Url.AbsoluteUri != "https://www.onegov.nsw.gov.au/PublicRegister/#/publicregister/search/Security") return; await Task.Delay(5000); var f = this.webBrowser1.Document.Body.All.GetElementsByName("searchForm") .Cast() .FirstOrDefault(); var q = f.All.GetElementsByName("searchText") .Cast() .FirstOrDefault(); q.InnerText = "123456789"; f.InvokeMember("submit"); } 

不要忘记using System.Threading.Tasks;添加using System.Threading.Tasks; 或者如果你使用.Net 4.0,你可以使用System.Threading.Thread.Sleep(5000)并删除async / await。

看起来该网站使用JSON POST。 如果你有FireFox打开Developer – > Network并查看“PerformSearch”条目。 这将告诉您在POST请求中您需要知道的所有内容,以便您可以阅读响应。