【问题标题】:C# Post data to formC# 将数据发布到表单
【发布时间】:2018-01-18 12:37:29
【问题描述】:

我以前使用 Selenium 来自动化 Web 流程。然而,它并不总是可靠地工作,更重要的是,它取决于不一定总是相同的屏幕尺寸。

现在我有一个这样的表格(非常简化):

<form type="POST" name="demoform">
  First name:<br>
  <input type="text" name="firstname"><br>
  Last name:<br>
  <input type="text" name="lastname">
</form>

以前,我会搜索输入名称并输入数据。但现在我想用不同的方式做到这一点。我想知道如何通过 POST 发送数据以及如何获取网页的整个 HTML 结果。此外,我想知道后者是否只是 HTML 响应,还是实际用户会看到的页面 HTML。

【问题讨论】:

  • 您想从 C# 测试方法执行单元测试之类的操作来测试发布请求吗?
  • 不,我实际上是在尝试自动化 Web 流程。
  • @John 所以让我看看我是否理解。您基本上是想抓取页面,提取表单输入,填充它们并自动发布表单?

标签: c# post webautomation


【解决方案1】:

试试这个...

  <form method="post" action="pagename" name="demoform">

      First name:<br>

      <input type="text" name="firstname"><br>

      Last name:<br>

      <input type="text" name="lastname">

      <input type="submit" value="Submit" />
    </form>

【讨论】:

  • 这在多大程度上回答了这个问题?
【解决方案2】:

我以前使用 Selenium 来自动化 Web 流程。 然而,它并不总是可靠的,更重要的是,它是 取决于屏幕大小

你并没有真正支持你关于可靠性的说法,但我不得不不同意。我最近参与了一个使用 Selenium Chrome 驱动程序的项目,没有遇到任何可靠性问题,也没有看到任何依赖于屏幕分辨率的东西?你一定做错了什么。无论如何,既然你想使用不同的技术,这里有一个关于你将如何去做的快​​速信息:

进一步我想知道后者是否只是一个 HTML 响应,或者它是 实际用户会看到的页面 HTML

既然您刚刚开始,您应该为自己配备一个网络调试工具,例如Fiddler。它允许您拦截和操作 Web 请求和响应。网上有很多关于如何使用 Fiddler 的免费教程,所以请找到一个并快速掌握它——它应该不会花很长时间,而且 Fiddler 是一种你不能没有的工具在 Web 开发或抓取期间长期运行。

下一步是熟悉HttpClient(.NET 4.5+,或WebClient 用于早期版本)。它允许您使用完全可定制的对象与网站进行通信。您几乎可以调整请求或响应的任何方面:标头、cookie、协议等(因此所有这些都与 Fiddler 一致)。这个类已经包含了很多逻辑,所以你可以专注于对你来说最重要的是通信

我想知道如何通过 POST 发送数据以及如何获取整个 HTML 网页的结果。

以下是使用 HttpClient 下载 html 字符串的方法:

public Task<string> GetHtmlAsync(string url)
{
    try
    {
        var t = Task.Run(async () => {
            using (var client = new HttpClient())
            {
                var response = await client.GetAsync(url);
                return await response.Content.ReadAsStringAsync();
            }
        });
        return t;
    }
    catch (HttpRequestException e)
    {
        return Task.FromException<string>(e);
    }
}

POST 非常相似,但这已经在 StackOverflow 上得到解答:How to make HTTP POST web request

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2014-06-05
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2018-12-28
    • 2016-11-02
    相关资源
    最近更新 更多