【问题标题】:Auto-complete a HTML form using a C# program使用 C# 程序自动完成 HTML 表单
【发布时间】:2010-10-21 18:44:56
【问题描述】:

我想编写一个 C# 程序(纯粹用于教育目的),它可以自动完成位于指定 URL 的 HTML 表单。问题是我不知道这是否可能,或者我该如何开始?我想下载 HTML,将其解析为表单元素的名称,然后使用必要的参数在该 URL 上进行 GET。这是个好主意吗?

【问题讨论】:

    标签: c# html console


    【解决方案1】:

    System.Net.WebRequest。您可以使用它来发出 GET 请求,其中变量编码在 URL 中,或 POST 请求,其中变量进入请求正文。表单的 HTML 源代码将告诉您要发出哪种类型的请求。

    如果表单的结构没有改变,您不需要在运行时下载或解析表单本身:您可以在构建 GET 或 POST 请求时在程序中对变量名称进行硬编码.

    【讨论】:

      【解决方案2】:

      您的总体想法是正确的,尽管通常 HTML 表单将执行返回服务器的 POST 而不是 GET。请参阅 this question 以获取 C# 中提供参数的 Web 请求的示例代码。特别注意告诉你添加 request.Method = "POST"; 的评论因为这会改变来自 GET 的请求。 (您可以通过查看其开始标记中的方法来判断表单是 GET 还是 POST。这个:

      <form id="form" action="..." method="post">
      

      是一个 POST 表单。没有声明的方法意味着它是一个 GET)

      更复杂的问题是解析 HTML 以查找元素。这是一个棘手的问题,因为 HTML 标准的松散性意味着您不能简单地将其视为 XML 文档并以这种方式进行解析,相反,您必须想出一种更宽容的方法。在这个网站 (this for example) 上有几个关于如何做到这一点的问题,这是一个常见的问题,所以谷歌无疑会给你一些线索。

      如果我正在处理这个问题,我会先让 Web 请求使用已知的表单(这样您就可以跳过解析),一旦您对从服务器发送和检索数据感到满意,就会担心这部分。

      【讨论】:

      • 是的,你是对的,我想让它首先在一个已知的表单上工作。
      【解决方案3】:

      WatiN 会为您执行此操作,它会自动执行 IE 以进行测试。但我用它来筛选刮东西。效果很好。

      http://watin.sourceforge.net/

      [Test] 
      public void SearchForWatiNOnGoogle()
      {
       using (IE ie = new IE("http://www.google.com"))
       {
        ie.TextField(Find.ByName("q")).TypeText("WatiN");
        ie.Button(Find.ByName("btnG")).Click();
      
        Assert.IsTrue(ie.ContainsText("WatiN"));
       }
      }
      

      【讨论】:

        【解决方案4】:

        Dave Ward 写了一篇很棒的文章,主要围绕使用 AJAX 回发到页面方法。这个想法是将响应对象序列化为 JSON 并使用 jQuery 显示在客户端上。这篇文章写得很好,有一个很好的例子,可以应用于你的情况。

        如果您通读这篇文章,您会发现您的想法与他的策略一致。 Dave 的网站上有许多很酷的文章,它们融合了 Asp.net、AJAX 和使用 jQuery 和 Javascript 的客户端技术。

        【讨论】:

          【解决方案5】:

          听起来像是涉及表单提交的屏幕/网络抓取。您可能想查看我对this question 的回复。

          【讨论】:

            猜你喜欢
            • 2013-03-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-27
            • 2017-09-10
            • 2021-04-14
            • 1970-01-01
            • 2013-09-21
            相关资源
            最近更新 更多