【问题标题】:Trigger HTML form (Button) programmatically以编程方式触发 HTML 表单(按钮)
【发布时间】:2013-12-06 07:49:44
【问题描述】:

我正在尝试以编程方式处理网站。假设我访问了页面www.example.com/something。在网站上有一个我正在按下的按钮。按钮的代码如下所示:

<form action="/something" method="POST" enctype="text/plain">
   <input type="submit"  class="button" value="Click me" >
</form>

按此按钮可更新网站上的信息。

现在我想以编程方式执行此过程,以便在按下按钮后接收更新网站的内容。

有人可以引导我找到正确的方向吗?最好在 C# 中。

提前谢谢你!

编辑

我使用 Fiddler 来捕获 HTTP 请求和响应,它看起来像这样:

POST /something HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://example.com/something
Cookie: cookie1=cookiecontent; cookie2=cookiecontent
Connection: keep-alive
Content-Type: text/plain
Content-Length: 0

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 05 Dec 2013 23:36:31 GMT
Content-Length: 2202

尽管请求包含 cookie,但它们似乎并不相关。我用 fiddler 解压收到的内容,发现想要的数据包含在响应中。

我对 HTTP 请求不是很有经验,因此希望有人可以帮助我将其转换为 C# http 请求以接收内容。

【问题讨论】:

  • 您能否澄清一下...您是否尝试使用 C# 程序(不是浏览器)从该页面挖掘数据?
  • 是的,这就是我想要做的。我希望我的 C# 程序在单击此按钮后接收网站上存在的数据。

标签: c# html forms


【解决方案1】:

如果有问题的网站是开放的,并且没有生成任何类型的 cookie 来验证请求(有很多这样的网站),那么您可以使用 System.Net.WebRequest 或类似的方式发布所需的表单数据,然后检查响应。有关示例,请参见 this MSDN 页面。

如果页面确实使用 cookie 等等,您将不得不获得更多创意。在某些情况下,您可以发出一个 Web 请求来获取第一页,检查 cookie 和隐藏表单值的结果并在您的 POST 中使用它们。

如果所有其他方法都失败了,那么Selenium WebDriver 库将为您提供几乎完整的浏览器仿真以及对 DOM 的完全访问权限。它比使用WebRequest 稍微复杂一些,但几乎可以用于您可以使用网络浏览器进行的所有操作。

无论您使用哪种方法,Fiddler 都是一个很好的调试工具。使用它来比较您的 C# 代码正在执行的操作与 Web 浏览器正在执行的操作,以查看您的代码是否有任何不正确的地方。

【讨论】:

  • 谢谢,来自您的 MSDN 链接的 System.Net.WebRequest 成功了。
【解决方案2】:

由于它是一个提交按钮,因此模拟生成的 HTTP 请求将比模拟点击更容易。首先,我会使用像Fiddler 这样的程序来检查您提交表单时发送的内容。然后我将复制该请求,只需更改我需要更改的值,使用HTTPWebRequest。你可以找到一个例子here

然后可以解析生成的 HTTPWebResponse 以获取数据。使用HtmlAgilityPack 之类的东西会使这部分变得更容易。

【讨论】:

  • 这也是我的第一个想法,但由于我对 http 请求不是很熟悉,我希望有另一种,从我的角度来看,更简单的方法。我添加了使用提琴手获得的信息。也许你可以给我一些关于如何将此请求转换为 C# http 请求的信息或示例。
  • @Lotzki 只需阅读链接的代码项目文章。它应该准确地告诉您复制请求需要做什么。
  • 我最终使用了 Corey 的链接。您的链接似乎包含所有需要的信息。然而,就我而言,他的版本更直接。
【解决方案3】:

您可以使用http://www.seleniumhq.org/projects/webdriver/ 为所欲为。可以在控制台程序中使用 c# 进行 Web 自动化。我正在使用它进行 ui 集成测试,效果很好

【讨论】:

    【解决方案4】:

    我会考虑搜索浏览器自动化框架。我通常会在 Python 中执行此操作,并且没有为此使用 .Net,但是快速的 Google 搜索会产生很多结果。

    包含在这些中:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2019-04-04
      • 2017-02-25
      • 2023-04-06
      相关资源
      最近更新 更多