模拟操作网页 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 = "361100210009480";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 = 0;string sUrl;while (true){Delay(500); //系統延遲50毫秒,夠少了吧! if (WEB.ReadyState == WebBrowserReadyState.Complete) //先判斷是否發生完成事件。{if (!WEB.IsBusy) //再判斷是瀏覽器是否繁忙 {i = i + 1;if (i == 2) //為什么 是2呢?因為每次加載frame完成時就會置IsBusy為false,未完成就就置IsBusy為false,你想一想,加載一次,然后再一次,再一次...... 最后一次.......{sUrl = WEB.Url.ToString();if (sUrl.Contains("res")) //這是判斷沒有網絡的情況下 {return false;}else{return true;}}continue;}i = 0;}}}下面是處理網頁元素的代碼示例:
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 = "361100210009480";//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 = 0; 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") + 6, href.LastIndexOf("\">") - 6 - 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());}} 與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的模拟操作网页 webBrowser的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Twebbrowser做可控编辑器与M
- 下一篇: 借记卡和贷记卡的区别