我正在做一些自动化工作,可以绕过一个网站&发布到HTML表单没问题,但现在我遇到了新的挑战, Ajax 表单。

由于没有可读的源代码,我想知道是否可以在C#中以progamatically方式填写Ajax表单。我目前正在使用不可见的axWebBrowser。

提前感谢您的帮助!

有帮助吗?

解决方案

是的,但我建议使用不同的方法来请求/响应服务器页面,包括常规页面和AJAX处理程序页面。

在c#中,尝试使用 WebRequest / WebResponse 或更专业的HttpWebRequest / HttpWebResponse类。

Ajax只不过是一种“花哨”的东西。允许Javascript向服务器发出HTTP请求的技术的名称,该服务器通常实现一些处理程序,这些处理程序为Javascript调用程序生成专门的轻量级内容(通常编码为JSON)。

因此,为了模拟AJAX调用,您所要做的就是检查目标应用程序(您想要“发布”到的网页)并查看用于AJAX通信的格式 - 然后复制页面的使用WebREquest / WebResponse类从C#进行Javascript行为。

请参阅 Firebug - 一个很棒的工具,可以让您检查网页以确定它所做的调用,哪些页面以及这些页面响应的内容。它在检查AJAX调用方面做得非常好。

以下是如何执行网络请求的一个非常简单的示例:

HttpWebRequest wReq = (HttpWebRequest)WebRequest.Create("http://www.mysite.com");

using (HttpWebResponse resp = (HttpWebResponse)wReq.GetResponse())
{
   // NOTE: A better approach would be to use the encoding returned by the server in
   // the Response headers (I'm using UTF 8 for brevity)
   using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.UTF8))
   {
       string content = sr.ReadToEnd();
       // Do something with the content
   }
}    

POST也是一个请求,但使用不同的方法。有关如何执行非常简单的帖子的示例,请参见此页

编辑 - 有关使用Firebug检查网页行为的详细信息

通过检查您尝试复制的页面,我的意思是使用工具(我使用Firebug - 在Firefox上)来确定页面和服务器之间的信息流。

使用Firebug,您可以使用“Net”进行操作。和“控制台”面板。 “Net”面板列出了加载页面时浏览器执行的所有请求。而“控制台”则指的是“控制台”。将列出页面加载后发生的页面与服务器之间的通信。在页面加载后发生的那些通信基本上是您要复制的AJAX调用(注意:必须在Firebug中对网络监视进行调整才能使其工作)

查看 Michael Sync的教程,了解有关Firebug的更多信息并尝试使用“控制台”面板了解详情关于AJAX请求。

关于“使用WebRequest / WebResponse”从C#复制页面的行为“ - 你必须意识到的是,正如我之前所说,Javascript AJAX调用只不过是一个HTTP请求。这是Javacript对Web服务器进行“幕后”或带外的HTTP请求。为了复制这个,它与复制正常的GET或正常的POST没有什么不同,如上所示。这就是Firebug的用武之地。使用它,您可以查看请求,就像Javascript生成它们一样 - 查看“控制台”面板,查看请求消息的外观。

然后你可以使用与上面相同的技术,使用HttpWebRequest / HttpWebResponse来生成与Javascript相同类型的请求,而只使用C#来实现。

格雷格,我希望这能澄清我的答案,但除此之外,我建议玩Firebug,也许可以了解更多有关HTTP协议如何工作以及AJAX如何工作的信息。

其他提示

你看过使用Selenium吗? AFAIK,您可以在C#中编写测试用例,我知道我们的测试人员在UI测试启用Ajax的ASP.NET站点之前已成功使用它

http://seleniumhq.org/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top