我正在尝试使用C#(可能使用WinForms)创建一个程序,该程序将在特定website的表单字段中输入许可证号,并验证许可证号是否是当前有效的许可证。< / p>
我不确定从哪里开始,因为我甚至无法在网站的源代码中找到表单字段ID,并且不确定该网站使用了哪些技术。
此外,此程序的目的是输入许可证号列表并返回每个许可证的名称和验证状态。数据源是网站。
有关如何解决此问题的任何信息都将非常感激,我是一名中间C#开发人员 - 主要在ASP.Net工作,但感觉Winforms可能更适合这个项目。
亲切的问候
答案 0 :(得分:3)
您可以使用WebBrowser
控件:
webBrowser1.Navigate("url of site")
webBrowser1.Document.GetElementById("buttonid")
在页面中查找元素,您也可以对HtmlElement
的{{1}}进行迭代,并查看示例webBrowser1.Document.Body.All
以找到它。element.GetAttribute("value") == "some vaule"
或element.InnerText ="some value"
element.SetAttribute("value", "some value")
例如,如果你浏览谷歌并查看页面来源,你会看到搜索文本框的名称是&#34; q&#34;并且包含搜索框的表单的名称是&#34; f&#34;,因此您可以编写此代码以自动搜索。
element.InvokeMember("method")
的表单。BrowserSample
并放在表单上。WebBrowser
形式的事件并导航到谷歌。Load
的{{1}}事件并找到DocumentCompleted
并找到webBrowser1
并设置f
的{{1}}并调用{{1}的提交}}。导航和文档加载完成后,将触发此事件。<强>代码:强>
q
如果您执行该程序,它首先导航到谷歌,然后显示搜索结果:
在您的特殊情况下
由于网站使用ajax加载内容,因此您应该在InnerText
中延迟:
q
不要忘记添加f
或者如果您使用.Net 4.0,您可以使用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<HtmlElement>()
.FirstOrDefault();
var q = f.All.GetElementsByName("q")
.Cast<HtmlElement>()
.FirstOrDefault();
q.InnerText = "C# Webbrowser Control";
f.InvokeMember("submit");
}
并删除async / await。
答案 1 :(得分:0)
看起来该网站使用JSON POST。如果你有FireFox open Developer - &gt;网络并查看“PerformSearch”条目。这将告诉您在POST请求中您需要知道的所有内容,以便您可以阅读响应。