我想实现一个网站自动登陆然后自动操作的功能
我先在winform中放了一个webBrowser控件,在它加载完成时模拟登陆,
代码如下:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (this.webBrowser1.ReadyState == WebBrowserReadyState.Interactive)
{
HtmlDocument document = this.webBrowser1.Document;
IList<KeyValuePair<string, string>> loginMes = GetLoginMes();
if (loginMes.Count == 0)
{
MessageBox.Show("请至少录入一组用户名和密码!");
}
else
{
document.GetElementById("txtusername").SetAttribute("value", loginMes[0].Key);
document.GetElementById("txtpassword").SetAttribute("value", loginMes[0].Value);
document.GetElementById("btnLogin").InvokeMember("click");
}
}
}
登陆成功后webBrowser会跳转,然后又会执行webBrowser1_DocumentCompleted对不对?这时候代码
document.GetElementById("txtusername").SetAttribute("value", loginMes[0].Key);就会报错了,报txtusername不存在的错识,然后我还需要在跳转后做其它的时候,是不是我需要在webBrowser1_DocumentCompleted方法中判断webBrower1的url地址呢?比如像下面这样:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (this.webBrowser1.ReadyState == WebBrowserReadyState.Interactive)
{
HtmlDocument document = this.webBrowser1.Document;
IList<KeyValuePair<string, string>> loginMes = GetLoginMes();
if (loginMes.Count == 0)
{
MessageBox.Show("请至少录入一组用户名和密码!");
}
else
{
if (this.webBrowser1.Url.AbsoluteUri =="登陆地址")
{
document.GetElementById("txtusername").SetAttribute("value", loginMes[0].Key);
document.GetElementById("txtpassword").SetAttribute("value", loginMes[0].Value);
document.GetElementById("btnStaticLogin").InvokeMember("click");
}
else if(this.webBrowser1.Url.AbsoluteUri =="登陆地址后地址")
{
执行登陆后的功能
}
}
}
}
如果webBrowser1一直跳转,我是不是需要在webBrowser1_DocumentCompleted方法中写很多的if判断,还是大家有其它的解决方法,请大家赐教!
------解决思路----------------------
interactive的时候还没下载完,等ready吧。
documentcomplete这个事件不提你说的不同网页这种情况,即使是同一个网页,每个框架也都会触发一次,执行代码之前应该检测事件到底是哪个网页发出来的。
------解决思路----------------------
楼上正解 DocumentCompleted实际上上C#封装的Activex事件,会多次发生..