【问题标题】:Is it possible to fill in an Ajax form programatically?是否可以以编程方式填写 Ajax 表单?
【发布时间】:2009-04-29 18:01:16
【问题描述】:

我正在做一些自动化工作,可以绕过网站并发布到 HTML 表单,但现在我面临新的挑战,Ajax 表单。

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

提前感谢您的帮助!

【问题讨论】:

    标签: c# post ajax-forms


    【解决方案1】:

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

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

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

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

    请参阅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 也是一个请求,但方法不同。请参阅this page 了解如何做一个非常简单的帖子的示例。

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

    我所说的检查您要复制的页面的意思是使用一种工具(我在 Firefox 上使用 Firebug)来确定页面和服务器之间的信息流。

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

    查看Michael Sync's tutorial 了解有关 Firebug 的更多信息,并尝试使用控制台面板了解有关 AJAX 请求的更多信息。

    关于“使用 WebRequest/WebResponse 从 C# 复制页面的行为” - 您必须意识到,就像我之前所说的,Javascript AJAX 调用只不过是一个 HTTP 请求。这是 Javacript 在“幕后”或带外向 Web 服务器发出的 HTTP 请求。要复制这一点,它实际上与复制一个普通的 GET 或一个普通的 POST 就像我上面展示的一样。这就是 Firebug 发挥作用的地方。使用它,您可以查看请求,因为 Javascript 使请求 - 查看控制台面板,并查看请求消息的样子。

    然后您可以使用与上述相同的技术,使用 HttpWebRequest/HttpWebResponse 发出与 Javascript 相同类型的请求,而只能从 C# 中执行。

    Gregg,我希望这能澄清我的答案,但除此之外,我建议使用 Firebug 并了解更多关于 HTTP 协议的工作原理以及 AJAX 作为一种技术如何工作的信息。

    【讨论】:

    • 查看 Wireshark 以了解网络上发生的情况,直至数据包级别。它具有出色的过滤/搜索工具。
    • 很高兴听到这是可能的,并感谢示例 HttpWebRequest 代码。如果您有时间,您能否提供以下示例代码(或链接):1)“检查您的目标应用程序(您想要“发布”到的网页)并查看 AJAX 通信使用的格式”和 2) "使用 WebRequest/WebResponse 类从 C# 复制页面的 Javascript 行为"
    • 我在答案中添加了更多信息。希望对您有所帮助!
    • Miky D,非常感谢您提供的额外信息。它把我推向了正确的方向。
    【解决方案2】:

    您是否考虑过使用 Selenium。 AFAIK,你可以用 C# 编写测试用例,我知道我们的测试人员之前已经成功使用它来测试启用 Ajax 的 ASP.NET 站点的 UI 测试

    http://seleniumhq.org/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多