webbrowser是一个比较实用的工具,主要用于在winform窗体中嵌入浏览器,达到winform与webform互操作的目的。
先上一个demo,看一下能实现什么效果。
1
2
3
4
5
6
7
8
9
10
11
12
|
private
void
Form1_Load(
object
sender, EventArgs e)
{
this
.webBrowser1.Url =
new
Uri(
"http://www.baidu.com"
);//指定url地址为百度首页
}
private
void
button1_Click(
object
sender, EventArgs e)
{
HtmlElement searchWords = webBrowser1.Document.All[
"kw"
];
//获取百度搜索的文本框
HtmlElement searchButton = webBrowser1.Document.All[
"su"
];
//获取百度搜索的按钮
searchWords.SetAttribute(
"value"
,
"guwei4037"
);
//给百度搜索的文本框赋值
searchButton.InvokeMember(
"click"
);
//调用百度搜索按钮的点击事件
}
|
在winform中拖一个webbrowser控件,然后在相应事件中键入如上代码,就可以实现自助搜索(无需在文本框中输入关键词guwei4037,再点搜索按钮,而是直接点击一个按钮进行搜索)。
原理很简单,就是通过查找在webbrowser控件生成的html代码中的input元素或button元素的id,通过api实现模拟赋值和查找工作。
再附一个稍微复杂的一点的例子。
如果生成的html比较复杂,比如含iframe这类的标签时该如何处理呢?
比如,我们要访问qq空间里面的留言功能时,通过google chrome浏览器看到的html代码,很复杂,好在我们也有办法处理。
1
2
3
4
|
private
void
Form1_Load(
object
sender, EventArgs e)
{
this
.webBrowser1.Url =
new
Uri(
"http://user.qzone.qq.com/345822155/infocenter#!app=334&url=http%3A%2F%2Fctc.qzs.qq.com%2Fqzone%2Fmsgboard%2Fmsgbcanvas.html%23page%3D1"
);
}
|
1
2
3
4
5
6
7
8
|
private
void
button1_Click(
object
sender, EventArgs e)
{
if
(!webBrowser1.IsBusy)
//判断有没有加载新的文档
{
HtmlElement searchButton = webBrowser1.Document.Window.Frames[
"tgb"
].Document.All[
"btnPostMsg"
];
//获取到iframe id为tgb下面的button
searchButton.InvokeMember(
"click"
);
}
}
|
更多信息,请参考:微软官方网站
本文转自 guwei4037 51CTO博客,原文链接:http://blog.51cto.com/csharper/1345990