使用C#阅读和发布到网页

我有一个项目在工作,要求我能够将信息输入到网页,阅读我被重定向到的下一页,然后采取进一步行动。 一个简化的现实世界的例子就像google.com,输入“Coding tricks”作为搜索条件,以及阅读结果页面。

像http://www.csharp-station.com/HowTo/HttpWebFetch.aspx链接的小编码示例告诉如何阅读网页,而不是如何通过将信息提交到表单并继续到下一页。

为了记录,我没有构建恶意和/或垃圾邮件相关产品。

那么我该如何阅读需要几步常规浏览才能获得的网页呢?

您可以以编程方式创建Http请求并检索响应:

string uri = "http://www.google.com/search"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; // encode the data to POST: string postData = "q=searchterm&hl=en"; byte[] encodedData = new ASCIIEncoding().GetBytes(postData); request.ContentLength = encodedData.Length; Stream requestStream = request.GetRequestStream(); requestStream.Write(encodedData, 0, encodedData.Length); // send the request and get the response using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { // Do something with the response stream. As an example, we'll // stream the response to the console via a 256 character buffer using (StreamReader reader = new StreamReader(response.GetResponseStream())) { Char[] buffer = new Char[256]; int count = reader.Read(buffer, 0, 256); while (count > 0) { Console.WriteLine(new String(buffer, 0, count)); count = reader.Read(buffer, 0, 256); } } // reader is disposed here } // response is disposed here 

当然,此代码将返回错误,因为Google使用GET而不是POST来进行搜索查询。

如果您处理特定网页,此方法将起作用,因为URL和POST数据都基本上是硬编码的。 如果你需要一些更有活力的东西,你必须:

  1. 捕获页面
  2. 剥去表格
  3. 根据表单字段创建POST字符串

FWIW,我认为像Perl或Python这样的东西可能更适合这类任务。

编辑:x-www-form-urlencoded

你可以尝试Selenium 。 使用Selenium IDE在Firefox中记录操作,以C#格式保存脚本,然后使用Selenium RC C#包装器播放它们。 正如其他人提到的那样,您也可以使用System.Net.HttpWebRequest或System.Net.WebClient 。 如果这是桌面应用程序,请参阅System.Windows.Forms.WebBrowser 。

附录:与基于Java的Selenium IDE和Selenium RC类似, WatiN Test Recorder和WatiN是基于.NET的。

您需要做的是继续检索和分析链中每个页面的html源代码。 对于每个页面,您需要弄清楚表单提交的外观,并发送一个与之匹配的请求以获取链中的下一页。

我所做的是构建一个包装System.Net.HttpWebRequest / HttpWebResponse的自定义类,因此检索页面就像使用System.Net.WebClient一样简单。 但是,我的自定义类还在请求之间保留相同的cookie容器,并使发送post数据,自定义用户代理等更容易一些。

根据网站的工作方式,您可以操纵url来执行您想要的操作。 例如,要搜索单词“beatles”,您只需打开google.com?q=beetles的请求,然后只需阅读结果即可。

或者,如果网站不使用查询字符串值(url)来处理页面操作,那么您将需要处理webrequest,而不是将所需的值发布到网站。 在Google中搜索以使用WebRequest和webresponse。

在您的Google示例中,您不应在搜索条件中输入任何内容,而应直接转到搜索按钮所在的页面。

例如: http : //www.google.com/search?hl = zh-CN&q = encoding%20tricks

我对这个产品运气很好:

iMacros的

http://www.iopus.com/

我有一个应用程序已经运行了很多个月,也许一年多使用他们的产品。

顶级产品有一个可用于记录和编辑宏的GUI,以及可以从.Net代码调用的C#库。

恕我直言,这是你开始时看起来很简单的那些编程领域之一(“我只是为页面获取HTML,处理字符串,然后获取下一页……”)但实际上它原来是一个真正的PITA。