模拟操作网页 webBrowser

时间:2023-03-10 02:54:06
模拟操作网页 webBrowser

C# 获取IFrame中body元素 (winform)

方法1.

找出iframe的b.html的src , 利用webbrowser去加载b.html

HtmlElementCollection a = webBrowser1.Document.All["loginframe"].GetElementsByTagName("iframe");
foreach (HtmlElement kk in a)
  {
     textBox1.Text = kk.GetAttribute("src");
}
或者

webBrowser1.Document.GetElementById("iframe的id").GetAttribute("src");

webBrowser1.Navigate("src");

方法2.

使用 frame的 document

webBrowser1.Document.Window.Frames["login_ifr"].Document;

方法只是抛砖引玉,大家自己去专研去把  转自:http://hi.baidu.com/dingding3224/item/8060946dac3de5166895e6d4

 HtmlDocument doc = webBrowser1.Document.Window.Frames["centerframe"].Document;
doc.GetElementById("code").InnerText = "";
HtmlElement he = null;
he = doc.GetElementById("btnSearch");
he.InvokeMember("Click");

在使用Webbrowser时,经常会遇到网页没有加载完成就进一步进行操作,这样不但取不到控件或数据,而且会报错,这里在网上找两个一个函数,对Webbrowser加载进行等待,加载好后再进行处理:

private void Delay(int Millisecond) //延迟系统时间,但系统又能同时能执行其它任务;
{
DateTime current = DateTime.Now;
while (current.AddMilliseconds(Millisecond) > DateTime.Now)
{
Application.DoEvents();//转让控制权
}
return;
}
private bool WaitWebPageLoad(WebBrowser WEB)
{
int i = ;
string sUrl;
while (true)
{
Delay(); //系统延迟50毫秒,够少了吧!
if (WEB.ReadyState == WebBrowserReadyState.Complete) //先判断是否发生完成事件。
{
if (!WEB.IsBusy) //再判断是浏览器是否繁忙
{
i = i + ;
if (i == ) //为什么 是2呢?因为每次加载frame完成时就会置IsBusy为false,未完成就就置IsBusy为false,你想一想,加载一次,然后再一次,再一次...... 最后一次.......
{
sUrl = WEB.Url.ToString();
if (sUrl.Contains("res")) //这是判断没有网络的情况下
{
return false;
}
else
{
return true;
}
}
continue;
}
i = ;
}
}
}

下面是处理网页元素的代码示例:

 private void GetSearchPage()
{
try
{
WebBrowser mainwb = new WebBrowser();
Navigate(mainwb, strAddress);
//加载完后获取查询页
WaitWebPageLoad(mainwb); HtmlDocument doc = mainwb.Document;
HtmlElement he = null;
he = doc.GetElementById("da");
he.InvokeMember("Click");
//输入数据进行查询
WaitWebPageLoad(mainwb);
HtmlDocument doc3 = mainwb.Document.Window.Frames["centerframe"].Document;
doc3.GetElementById("code").InnerText = "";
//doc.GetElementById("j_password").InnerText = textBox2.Text;
//doc.GetElementById("j_captcha").InnerText = textBox3.Text;
HtmlElement he3 = null;
he3 = doc3.GetElementById("btnSearch");
he3.InvokeMember("Click");
//获取查询出来的超链接
WaitWebPageLoad(mainwb);
HtmlDocument doc1 = mainwb.Document.Window.Frames["centerframe"].Document; HtmlElementCollection hec = doc1.GetElementsByTagName("TD");
ArrayList arrHref = new ArrayList();
arrHref.Clear();
//string a = "";
for (int i = ; i < hec.Count; i++)
{
if (hec[i].InnerHtml != null)
{
//hec[i].InvokeMember("Click");
if (hec[i].InnerHtml.ToString().Contains("href"))
{
string href = hec[i].InnerHtml.ToString(); arrHref.Add(href.Substring(href.IndexOf("href") + , href.LastIndexOf("\">") - - href.IndexOf("href"))); }
}
}
foreach (string href in arrHref)
{
WebBrowser Datawb = new WebBrowser();
Navigate(Datawb, strAddress + href);
WaitWebPageLoad(Datawb);
HtmlDocument doca = null;
doca = Datawb.Document;
string b = doca.GetElementById("txtITEMcode").InnerText;
arrReturn.Add(b);
//GetOneRecord();
//webBrowser2.Navigate(Str_Websit);
//Datawb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(GetOneRecord);
} }
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}