给举个例子吧。假设你使用webbrowser来显示 http://bbs.csdn.net/forums/DotNET 网页,并且想点击其 “发帖”按钮(它没有id),你可以这样写void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (this.webBrowser1.ReadyState == WebBrowserReadyState.Complete) { var top = (from n in this.webBrowser1.Document.GetElementsByTagName("DIV").Cast<HtmlElement>() where n.GetAttribute("className") == "page_nav" select n).First(); var link = (from n in top.All.Cast<HtmlElement>() where n.TagName == "A" && n.GetAttribute("className") == "btn_1" select n).First(); link.InvokeMember("click"); } }
当然也可以写void Flip_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { if (this.webBrowser1.ReadyState == WebBrowserReadyState.Complete) { var top = (from n in this.webBrowser1.Document.GetElementsByTagName("DIV").Cast<HtmlElement>() where n.GetAttribute("className") == "page_nav" select n).First(); var link = (from n in top.GetElementsByTagName("A").Cast<HtmlElement>() where n.GetAttribute("className") == "btn_1" select n).First(); link.InvokeMember("click"); } }或者其他写法也都可以。总之,如果没有id,可以靠任何其他特征来搜索。为了快速,你可以利用任何结构化信息,多写上两行代码,来加速。
那这样的按钮怎么办?
我是新手,是这样的么,但貌似不行
HtmlElement tbsubmit = webBrowser1.Document.All["Submit"];
tbsubmit.InvokeMember("click");
网页代码这样的(一部分)
<form method="post" action="?con=signin&act=add" name="theForm" id="theForm">
<input type="submit" value="确定" style="font-size:30px;font-weight:bold; width:150px;" />
</form >
{
if (this.webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
var top = (from n in this.webBrowser1.Document.GetElementsByTagName("DIV").Cast<HtmlElement>()
where n.GetAttribute("className") == "page_nav"
select n).First();
var link = (from n in top.All.Cast<HtmlElement>()
where n.TagName == "A" && n.GetAttribute("className") == "btn_1"
select n).First();
link.InvokeMember("click");
}
}
{
if (this.webBrowser1.ReadyState == WebBrowserReadyState.Complete)
{
var top = (from n in this.webBrowser1.Document.GetElementsByTagName("DIV").Cast<HtmlElement>()
where n.GetAttribute("className") == "page_nav"
select n).First();
var link = (from n in top.GetElementsByTagName("A").Cast<HtmlElement>()
where n.GetAttribute("className") == "btn_1"
select n).First();
link.InvokeMember("click");
}
}或者其他写法也都可以。总之,如果没有id,可以靠任何其他特征来搜索。为了快速,你可以利用任何结构化信息,多写上两行代码,来加速。