使用.NET的Web自动化

我是一个非常新手的程序员。 你们中的任何人都知道如何使用C#进行Web自动化吗? 基本上,我只想在网上自动实现一些简单的操作。 打开网络链接后,我只想自动执行以下操作。

  1. 自动输入一些值并单击“运行”按钮。
  2. 选中ComboBox并单击“下载”按钮。

我怎么能用C#做到这一点? 我的朋友介绍我使用Powershell,但我猜.Net也提供这种类型的库。 有关我的任何建议或链接吗?

您可以使用System.Windows.Forms.WebBrowser控件( MSDN文档 )。 对于测试,它允许您执行可在浏览器中完成的操作。 它无需任何额外的工作即可轻松执行JavaScript。 如果出现问题,您将能够直观地看到该网站所处的状态。

例:

 private void buttonStart_Click(object sender, EventArgs e) { webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); webBrowser1.Navigate("http://www.wikipedia.org/"); } void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { HtmlElement search = webBrowser1.Document.GetElementById("searchInput"); if(search != null) { search.SetAttribute("value", "Superman"); foreach(HtmlElement ele in search.Parent.Children) { if (ele.TagName.ToLower() == "input" && ele.Name.ToLower() == "go") { ele.InvokeMember("click"); break; } } } } 

要回答您的问题:如何选中复选框

对于HTML:

  

代码:

 search = webBrowser1.Document.GetElementById("testCheck"); if (search != null) search.SetAttribute("checked", "true"); 

实际上,具体的“如何”很大程度上取决于实际的HTML。


为了处理您的multithreading问题:

 private delegate void StartTestHandler(string url); private void StartTest(string url) { if (InvokeRequired) Invoke(new StartTestHandler(StartTest), url); else { webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted); webBrowser1.Navigate(url); } } 

InvokeRequired ,检查当前线程是否是UI线程(实际上,是创建表单的线程)。 如果不是,那么它将尝试在所需的线程中运行StartTest。

如果你想模拟一个真正的浏览器,那么WatiN将非常适合你。 (Selenium是另一种选择,但我不建议你这样做)。

如果要在HTTP级别上工作,请使用WebRequest和相关类。

查看SimpleBrowser,它是一个相当成熟,轻量级的浏览器自动化库。

https://github.com/axefrog/SimpleBrowser

从页面:

SimpleBrowser是一款轻量级但function强大的浏览器自动化引擎,专为自动化和测试场景而设计。 它提供了一个直观的API,可以使用各种匹配技术轻松快速地提取页面的特定元素,然后使用Click(),SubmitForm()等方法与这些元素进行交互。 SimpleBrowser不支持JavaScript,但允许在提交或导航之前手动操作用户代理,引用者,请求标头,表单值和其他值。

.NET没有任何内置function。 它确实有WebClientHttpRequest / HttpResponse类,但它们只是构建块。

我正在使用ObjectForScripting来自动化WebBrowser,一个Javascript回调到C#函数,然后在c#中提取数据或自动执行多项操作。

我在以下链接中已经清楚地解释过了

使用Web浏览器和C#进行Web自动化

您无法轻松自动化客户端活动,例如填写表单或单击C#按钮。 但是,如果你研究JavaScript ,你可能能够更好地自动化其中的一些东西。 要真正实现自动化,您需要通过单击按钮对调用进行反向工程,并使用@John提及的类直接连接到URL。