我将网页加载到WebBrowser对象中。我想要做的是访问该页面上的元素来输入数据。例如,输入用户名和密码并提交表单。
这怎么可能?有什么想法吗?
我可以使用HTMLAgilityPack来访问元素并设置它们的值吗?
答案 0 :(得分:2)
查看此文档示例:http://msdn.microsoft.com/en-us/library/system.windows.forms.htmldocument.aspx
通过Web浏览器控件,有一个HtmlDocument类型的Document属性,它为您提供了影响页面的能力。我个人不知道它是否可以做你想做的一切,但这将是一个很好的起点。
HTH。
答案 1 :(得分:0)
有很多解决方案。我自己用过的两个是:
WaitN - http://watin.sourceforge.net/ WebAii - 显然是由Telerik购买的?过去有免费版本,不确定是否有更长的版本 - http://www.artoftest.com/index.html
然后就是对WebBrowser控件使用自动化。自动化框架使其变得更加简单。
答案 2 :(得分:0)
另请查看此示例,该示例使用HtmlAgilityPack执行包含用户名和密码字段的POST请求:
http://refactoringaspnet.blogspot.com/2010/04/using-htmlagilitypack-to-get-and-post.html
答案 3 :(得分:0)
我使用HtmlAgilityPack和fiddler的组合来观看流量。使用fiddler,您可以看到正在对服务器发布的帖子,并且只需复制它即可。然后,您可以捕获cookie数据以保存登录会话。从那里可以正常地浏览网站。
要注意的一些事项,如果您使用登录来获取数据,那么可能会有cookie。如果是这样,您需要在cookieContainer中设置它。这是我用来将数据发布到网址的示例函数。
private string PostWebRequestContent(Uri uri, string postData)
{
CookieContainer cookies = LoggedInCookie();
foreach (Cookie c in cookies.GetCookies(uri))
{
int i = 0;
}
HttpWebRequest req = GetWebRequest(uri);
req.CookieContainer = cookies;
req.Accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/vnd.xfdl; version=7.5.0.51, application/x-shockwave-flash, */*";
req.Method = "POST";
req.Headers.Add("Accept-Language: en-us");
//req.Headers.Add("Accept-Encoding: gzip,deflate");
//req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
req.KeepAlive = true;
req.ContentType = "application/x-www-form-urlencoded";
StreamWriter requestWriter = new StreamWriter(req.GetRequestStream());
requestWriter.Write(postData);
requestWriter.Close();
string sid = "";
try
{
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
using (StreamReader sr = new StreamReader(res.GetResponseStream()))
{
sid = sr.ReadToEnd().Trim();
}
}
}
catch (WebException e)
{
Console.WriteLine(e.Message);
}
return sid;
}
Cookie会话功能
private CookieContainer GetSessionCookie(Uri uri)
{
HttpWebRequest req = GetWebRequest(uri);
CookieContainer cookies = new CookieContainer();
req.CookieContainer = cookies;
req.GetResponse().Close();
return cookies;
}