模拟操作网页 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());
            }
        }
原文地址:https://www.cnblogs.com/tylertang/p/3256186.html