C#自动登录网站(一)----WebBrowser
2013-06-03 20:31
351 查看
这章写自动登录某个网站,例如QQ空间,163邮箱啊,csdn等,有那里不对希望读者指点出来或者有更好的提议的说出来。
看到文章的题目大家也清楚这篇文章用的便是WebBrowser,写完到时还会出另外2种使用WebClient跟使用HttpWebRequest/HttpWebResponse。
一、我们先建立一个window窗体应用。
把窗体设置大点。
然后在左边工具箱所有窗体控件里面最下面一个WebBrowser控件拖到主窗体上。
然后再添加2个文本框textboxId跟textboxPwd跟一个按钮
这样基本的界面东西准备好了,接下来我们准备第二步,我们先尝试登录到163邮箱
第二步:
我们首先添加一个窗体加载事件让窗体一加载完后加载登录页面代码如下:
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://reg.163.com/");
}
运行效果如下:
嘿嘿,卖广告啊~~~~~
接下来就是第三步了,我们在浏览器上打开
http://reg.163.com/ 然后查看源码,看下输入帐号,密码,跟登录按钮的id分别为什么,如下图:
由上可以看出帐号,密码,跟登录按钮的id分别为username,password,loginBtn
好接下来我们开始第四步编写登录的代码,代码如下:
private void button1_Click(object sender, EventArgs e)
{
//首先确定帐号密码不能为空
if (textBoxId.Text == "" || textBoxPwd.Text == "")
{
MessageBox.Show("帐号密码不能为空");
return;
}
//判断是否已加载完网页
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
//获取网页文档对象,相当于获取网页的全部源码
HtmlDocument htmlDoc = this.webBrowser1.Document;
//设置帐号
HtmlElement id = htmlDoc.GetElementById("username");
id.SetAttribute("value", textBoxId.Text.Trim());
//设置密码
HtmlElement pwd = htmlDoc.GetElementById("password");
pwd.SetAttribute("value", textBoxPwd.Text.Trim());
//登录
HtmlElement btn = htmlDoc.GetElementById("loginBtn");
if (btn != null)
{
btn.InvokeMember("click");
}
}
}
运行下,输入帐号跟密码登录后效果如下:
是不是很简单呢,哈哈。
接下来我们试试登录csdn的,同样我们获取登录地址,表单的字段id分别为(u,p,aLogin)
嗯,我们来试试看怎样......
......
......
是不是发现不行呢,原来csdn的登录页面是用iframe嵌套在主页面的,我们查看下源码可以看到如下图:
我们可以看到iframe的id为logfrm
所以这时候我们要把帐号密码嵌入进iframe里面去而不是主页面去,所以我们需要把登录按钮的代码修改下,只需要修改第一句
HtmlDocument htmlDoc=webBrowser1.Document.Window.Frames["logfrm"].Document;
把iframe的页面内容获取到。
按钮的代码如下:
private void button1_Click(object sender, EventArgs e)
{
//首先确定帐号密码不能为空
if (textBoxId.Text == "" || textBoxPwd.Text == "")
{
MessageBox.Show("帐号密码不能为空");
return;
}
//判断是否已加载完网页
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
//获取网页文档对象,相当于获取网页的全部源码
HtmlDocument htmlDoc = HtmlDocument htmlDoc = webBrowser1.Document.Window.Frames["logfrm"].Document;
//设置帐号
HtmlElement id = htmlDoc.GetElementById("u");
id.SetAttribute("value", textBoxId.Text.Trim());
//设置密码
HtmlElement pwd = htmlDoc.GetElementById("p");
pwd.SetAttribute("value", textBoxPwd.Text.Trim());
//登录
HtmlElement btn = htmlDoc.GetElementById("aLogin");
if (btn != null)
{
btn.InvokeMember("click");
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("https://passport.csdn.net/account/login");
}
这样试一下是不是可以了呢,运行效果如下:
当然我们还要系统自己知道是不是登录成功,首先我们需要在登录后的页面找登录后的页面存在的特征,例如***你好等等,这个时候我们只要
String s =webBrowser1.DocumentText;
这样便可获取文档的文本然后用正则表达式匹对出特征,符合的话就是登录成功咯,当然登录页面往往是有验证码的,这个问题留到后面有空再说自动识别验证码.
看到文章的题目大家也清楚这篇文章用的便是WebBrowser,写完到时还会出另外2种使用WebClient跟使用HttpWebRequest/HttpWebResponse。
一、我们先建立一个window窗体应用。
把窗体设置大点。
然后在左边工具箱所有窗体控件里面最下面一个WebBrowser控件拖到主窗体上。
然后再添加2个文本框textboxId跟textboxPwd跟一个按钮
这样基本的界面东西准备好了,接下来我们准备第二步,我们先尝试登录到163邮箱
第二步:
我们首先添加一个窗体加载事件让窗体一加载完后加载登录页面代码如下:
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://reg.163.com/");
}
运行效果如下:
嘿嘿,卖广告啊~~~~~
接下来就是第三步了,我们在浏览器上打开
http://reg.163.com/ 然后查看源码,看下输入帐号,密码,跟登录按钮的id分别为什么,如下图:
由上可以看出帐号,密码,跟登录按钮的id分别为username,password,loginBtn
好接下来我们开始第四步编写登录的代码,代码如下:
private void button1_Click(object sender, EventArgs e)
{
//首先确定帐号密码不能为空
if (textBoxId.Text == "" || textBoxPwd.Text == "")
{
MessageBox.Show("帐号密码不能为空");
return;
}
//判断是否已加载完网页
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
//获取网页文档对象,相当于获取网页的全部源码
HtmlDocument htmlDoc = this.webBrowser1.Document;
//设置帐号
HtmlElement id = htmlDoc.GetElementById("username");
id.SetAttribute("value", textBoxId.Text.Trim());
//设置密码
HtmlElement pwd = htmlDoc.GetElementById("password");
pwd.SetAttribute("value", textBoxPwd.Text.Trim());
//登录
HtmlElement btn = htmlDoc.GetElementById("loginBtn");
if (btn != null)
{
btn.InvokeMember("click");
}
}
}
运行下,输入帐号跟密码登录后效果如下:
是不是很简单呢,哈哈。
接下来我们试试登录csdn的,同样我们获取登录地址,表单的字段id分别为(u,p,aLogin)
嗯,我们来试试看怎样......
......
......
是不是发现不行呢,原来csdn的登录页面是用iframe嵌套在主页面的,我们查看下源码可以看到如下图:
我们可以看到iframe的id为logfrm
所以这时候我们要把帐号密码嵌入进iframe里面去而不是主页面去,所以我们需要把登录按钮的代码修改下,只需要修改第一句
HtmlDocument htmlDoc=webBrowser1.Document.Window.Frames["logfrm"].Document;
把iframe的页面内容获取到。
按钮的代码如下:
private void button1_Click(object sender, EventArgs e)
{
//首先确定帐号密码不能为空
if (textBoxId.Text == "" || textBoxPwd.Text == "")
{
MessageBox.Show("帐号密码不能为空");
return;
}
//判断是否已加载完网页
if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
//获取网页文档对象,相当于获取网页的全部源码
HtmlDocument htmlDoc = HtmlDocument htmlDoc = webBrowser1.Document.Window.Frames["logfrm"].Document;
//设置帐号
HtmlElement id = htmlDoc.GetElementById("u");
id.SetAttribute("value", textBoxId.Text.Trim());
//设置密码
HtmlElement pwd = htmlDoc.GetElementById("p");
pwd.SetAttribute("value", textBoxPwd.Text.Trim());
//登录
HtmlElement btn = htmlDoc.GetElementById("aLogin");
if (btn != null)
{
btn.InvokeMember("click");
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("https://passport.csdn.net/account/login");
}
这样试一下是不是可以了呢,运行效果如下:
当然我们还要系统自己知道是不是登录成功,首先我们需要在登录后的页面找登录后的页面存在的特征,例如***你好等等,这个时候我们只要
String s =webBrowser1.DocumentText;
这样便可获取文档的文本然后用正则表达式匹对出特征,符合的话就是登录成功咯,当然登录页面往往是有验证码的,这个问题留到后面有空再说自动识别验证码.
相关文章推荐
- C# winform的WebBrowser自动登录某网站
- 利用webBrowser来实现自动登录网站
- 使用WebBrowser自动登录阿里妈妈网站
- 使用WebBrowser自动登录阿里妈妈网站
- Delphi WebBrowser Ole 自动登录网站
- 自动登录http://www.netyi.net/网站的工具
- Winform下动态执行JavaScript脚本获取运行结果,谈谈网站的自动登录及资料获取操作
- 在IE自动登录使用域账号验证的网站,例如基于AD的windows验证的sharepoint站点
- Cookie-网站登录-下次自动登录
- Delphi用WebBrowser编程-自动登录操作
- .NET 网站自动登录
- 网站1周内自动登录功能实现
- 引用 使用Session和Cookie实现网站自动登录
- Web自动化测试之12306火车票网站自动登录工具
- C# webBrowser 自动登录淘宝 模拟点击输入 模拟点击无ID 无name的html元素按钮
- 有关filter实现网站自动登录
- 使用程序自动登录网站
- 网站自动登录功能的设计[转]
- 关闭浏览器再打开,网站是否应该自动登录以及如何实现呢?
- HttpWebRequest自动登录网站并获取网站内容(不包含验证码的网站)