题
我正在做一些自动化工作,可以绕过一个网站&发布到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站点之前已成功使用它