博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#WebBrowser控件使用教程与技巧收集
阅读量:4325 次
发布时间:2019-06-06

本文共 7873 字,大约阅读时间需要 26 分钟。

 先看下这几天做的软件功能:

 

 

-------------------分隔线-------------------------------------------------------

软件所使用到的WebBrowser控件所有功能:

Navigate(string urlString):浏览urlString表示的网址Navigate(System.Uri url):浏览url表示的网址Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders): 浏览urlString表示的网址,并发送postData中的消息//(通常我们登录一个网站的时候就会把用户名和密码作为postData发送出去)GoBack():后退GoForward():前进Refresh():刷新Stop():停止GoHome():浏览主页WebBrowser控件的常用属性:Document:获取当前正在浏览的文档DocumentTitle:获取当前正在浏览的网页标题StatusText:获取当前状态栏的文本Url:获取当前正在浏览的网址的UriReadyState:获取浏览的状态WebBrowser控件的常用事件:DocumentTitleChanged,CanGoBackChanged,CanGoForwardChanged,DocumentTitleChanged,ProgressChanged,ProgressChangedDocumentCompleted 页面加载完成之后的事件复制代码

1、获取非input控件的值:

webBrowser1.Document.All["控件ID"].InnerText;或webBrowser1.Document.GetElementById("控件ID").InnerText;或webBrowser1.Document.GetElementById("控件ID").GetAttribute("value");

2.获取input控件的值:

webBrowser1.Document.All["控件ID"].GetAttribute("value");;或webBrowser1.Document.GetElementById("控件ID").GetAttribute("value");

3、给输入框赋值:

//输入框user.InnerText = "myname";password.InnerText = "123456";webBrowser1.Document.GetElementById("password").SetAttribute("value", "Welcome123");

4、下拉、复选、多选:

 

//下拉框:secret.SetAttribute("value", "question1");  //复选框rememberme.SetAttribute("Checked", "True");//多选框cookietime.SetAttribute("checked", "checked");

5、根据已知有ID的元素操作没有ID的元素:

HtmlElement btnDelete = webBrowser1.Document.GetElementById(passengerId).Parent.Parent.Parent.Parent.FirstChild.FirstChild.Children[1].FirstChild.FirstChild;

 

6、获取Div或其他元素的样式:

webBrowser1.Document.GetElementById("addDiv").Style;

7、直接执行页面中的脚本函数,带动态参数或不带参数都行

Object[] objArray = new Object[1];objArray[0] = (Object)this.labFlightNumber.Text;webBrowser1.Document.InvokeScript("ticketbook", objArray);webBrowser1.Document.InvokeScript("return false");

8、自动点击、自动提交:

HtmlElement btnAdd = doc.GetElementById("addDiv").FirstChild;btnAdd.InvokeMember("Click");

9、自动赋值,然后点击提交按钮的时候如果出现脚本错误或一直加载的问题,一般都是点击事件执行过快,这时需要借助Timer控件延迟执行提交按钮事件:

 

this.timer1.Enabled = true;this.timer1.Interval = 1000 * 2;private void timer1_Tick(object sender, EventArgs e){    this.timer1.Enabled = false;    ClickBtn.InvokeMember("Click");//执行按扭操作}

10、屏蔽脚本错误:

将WebBrowser控件ScriptErrorsSuppressed设置为True即可

11、自动点击弹出提示框:

 

private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e){  //自动点击弹出确认或弹出提示  IHTMLDocument2 vDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;  vDocument.parentWindow.execScript("function confirm(str){return true;} ", "javascript"); //弹出确认  vDocument.parentWindow.execScript("function alert(str){return true;} ", "javaScript");//弹出提示}

12.WebBrowser页面加载完毕之后,在页面中进行一些自动化操作的时候弹出框的自动点击(屏蔽)

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e){    //自动点击弹出确认或弹出提示    IHTMLDocument2 vDocument = (IHTMLDocument2)webBrowser1.Document.DomDocument;    vDocument.parentWindow.execScript("function confirm(str){return true;} ", "javascript"); //弹出确认    vDocument.parentWindow.execScript("function alert(str){return true;} ", "javaScript");//弹出提示    //下面是你的执行操作代码}

13、获取网页中的Iframe,并设置Iframe的src

 

HtmlDocument docFrame = webBrowser1.Document.Window.Frames["mainFrame"].Document; 或HtmlDocument docFrame = webBrowser1.Document.All.Frames["mainFrame"].Document; docFrame.All["mainFrame"].SetAttribute("src", "http://www.sufeinet.com/");

网页中存在Iframe的时候webBrowser1.Url和webBrowser1_DocumentCompleted中的e.Url不一样,前者是主框架的Url,后者是当前活动框口的Url。

14、让控件聚焦

this.webBrowser1.Select();this.webBrowser1.Focus();doc.All["TPL_password_1"].Focus();

15、打开本地网页文件

webBrowser1.Navigate(Application.StartupPath + @"\Test.html");

16、获取元素、表单

//根据Name获取元素public HtmlElement GetElement_Name(WebBrowser wb,string Name){    HtmlElement e = wb.Document.All[Name];    return e;} //根据Id获取元素public HtmlElement GetElement_Id(WebBrowser wb, string id){    HtmlElement e = wb.Document.GetElementById(id);    return e;} //根据Index获取元素public HtmlElement GetElement_Index(WebBrowser wb,int index){    HtmlElement e = wb.Document.All[index];    return e;} //获取form表单名name,返回表单public HtmlElement GetElement_Form(WebBrowser wb,string form_name){    HtmlElement e = wb.Document.Forms[form_name];    return e;}  //设置元素value属性的值public void Write_value(HtmlElement e,string value){    e.SetAttribute("value", value);} //执行元素的方法,如:click,submit(需Form表单名)等public void Btn_click(HtmlElement e,string s){     e.InvokeMember(s);}

17。获取Cookie

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]      static extern bool InternetGetCookieEx(string pchUrl, string pchCookieName, StringBuilder pchCookieData, ref System.UInt32 pcchCookieData, int dwFlags, IntPtr lpReserved);      private static string GetCookieString(string url)      {          uint datasize = 1024;          StringBuilder cookieData = new StringBuilder((int)datasize);          if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x2000, IntPtr.Zero))          {              if (datasize < 0)                  return null;              cookieData = new StringBuilder((int)datasize);              if (!InternetGetCookieEx(url, null, cookieData, ref datasize, 0x00002000, IntPtr.Zero))                  return null;          }          return cookieData.ToString();      }      private void webBrowser1_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e)      {          richTextBox1.Text = string.Empty;          if (cbcookie.Checked)          {              if (checkBox1.Checked)              {                  richTextBox1.Text = GetCookieString(textBox1.Text.Trim());              }              else              {                  richTextBox1.Text = webBrowser1.Document.Cookie;              }          }      }

18.怎么设置代理

///    /// 代理结构体   ///    public struct Struct_INTERNET_PROXY_INFO   {       public int dwAccessType;       public IntPtr proxy;//IP以及端口号       public IntPtr proxyBypass;   };///         /// 设置代理的Api        ///         /// 
[DllImport("wininet.dll", SetLastError = true)] private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength); /// /// 代理IP以及端口号 /// /// private void RefreshIESettings(string strProxy) { const int INTERNET_OPTION_PROXY = 38; const int INTERNET_OPEN_TYPE_PROXY = 3; Struct_INTERNET_PROXY_INFO struct_IPI; // Filling in structure struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY; struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy); struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local"); // Allocating memory IntPtr intptrStruct = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI)); // Converting structure to IntPtr Marshal.StructureToPtr(struct_IPI, intptrStruct, true); bool iReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, Marshal.SizeOf(struct_IPI)); }--------------------RefreshIESettings("41.129.53.227:80"); webBrowser1.Navigate("http://www.sufeinet.com");

 

19.怎么在加载完成某个页面之后执行代码

//本事件是当每次加载完成当前页面后才会执行的        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)        {            //e.Url是当前加载的页面,            if (e.Url.ToString().Contains("http://sufeinet.com"))            {                //执行操作1            }            else if (e.Url.ToString().Contains("http://baidu.com"))            {                //执行操作2            }        }

20.怎么禁止在新窗口中打开网页

 

private void webBrowser1_NewWindow(object sender, CancelEventArgs e){        string url = ((System.Windows.Forms.WebBrowser)sender).StatusText;        webBrowser1.Navigate(url);        e.Cancel = true;     }

21.怎么设置Cookie

webBrowser1.Document.Cookie=“你的Cookie值”;

 

 

 

 

 

转载于:https://www.cnblogs.com/miao31/p/3580720.html

你可能感兴趣的文章
阶段3 2.Spring_01.Spring框架简介_05.spring的优势
查看>>
阶段3 2.Spring_02.程序间耦合_7 分析工厂模式中的问题并改造
查看>>
阶段3 2.Spring_02.程序间耦合_4 曾经代码中的问题分析
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_4 ApplicationContext的三个实现类
查看>>
阶段3 2.Spring_02.程序间耦合_8 工厂模式解耦的升级版
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_3 spring基于XML的IOC环境搭建和入门
查看>>
阶段3 2.Spring_04.Spring的常用注解_3 用于创建的Component注解
查看>>
阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
查看>>
阶段3 2.Spring_04.Spring的常用注解_5 自动按照类型注入
查看>>
阶段3 2.Spring_04.Spring的常用注解_7 改变作用范围以及和生命周期相关的注解
查看>>
阶段3 2.Spring_05.基于XML的IOC的案例1_3 测试基于XML的IOC案例
查看>>
阶段3 2.Spring_04.Spring的常用注解_4 由Component衍生的注解
查看>>
阶段3 2.Spring_06.Spring的新注解_2 spring的新注解-Bean
查看>>
阶段3 2.Spring_04.Spring的常用注解_6 用于注入数据的注解
查看>>
阶段3 2.Spring_06.Spring的新注解_3 AnnotationConfigApplicationContext的使用
查看>>
阶段3 2.Spring_07.银行转账案例_2 案例中添加转账方法并演示事务问题
查看>>
阶段3 2.Spring_07.银行转账案例_6 测试转账并分析案例中的问题
查看>>
阶段3 2.Spring_07.银行转账案例_7 代理的分析
查看>>