使用C#程序自动完成HTML表单

时间:2009-04-25 10:52:46

标签: c# html console

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

5 个答案:

答案 0 :(得分:3)

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

如果表单的结构没有改变,您将无需在运行时下载或解析表单:您可以在构造GET或POST请求的位置对程序中的变量名进行硬编码

答案 1 :(得分:2)

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

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

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

更复杂的问题是解析HTML以查找元素。这是一个棘手的问题,因为HTML标准的松散意味着您不能简单地将其视为XML文档并以此方式解析它,而是必须提出一种更宽容的方法。关于如何在此网站上执行此操作有几个问题(this for example),这是一个常见问题,因此Google无疑会为您提供一些线索。

如果我正在处理这个问题,我会首先使用已知表单获取Web请求(因此您可以跳过解析)并在您熟悉从服务器发送和检索数据后担心该部分。

答案 2 :(得分:2)

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"));
 }
}

答案 3 :(得分:1)

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

如果你仔细阅读帖子,你会发现你的想法与他的策略是一致的。 Dave的网站上有许多很酷的文章,它们使用jQuery和Javascript来混合Asp.net,AJAX和客户端技术。

答案 4 :(得分:0)

听起来像涉及表单提交的屏幕/网页刮擦。您可能需要查看我对this question的回答。