我以前使用过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。
答案 0 :(得分:2)
我以前使用过Selenium来自动化Web进程。 但是,它并不总是可靠,更重要的是,它是可靠的 取决于屏幕尺寸
你还没有真正支持你关于可靠性的陈述,但我不同意。我最近参与了一个使用Selenium Chrome Driver的项目,并没有遇到任何可靠性问题,也没有看到任何依赖屏幕分辨率的东西?你一定做错了。无论如何,既然你想在这里使用不同的技术,可以快速了解你将如何实现它:
此外,我想知道后者是否只是一个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
答案 1 :(得分:0)
试试这个......
<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>