常用方法

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();//浏览主页

常用属性

Document;//获取当前正在浏览的文档
DocumentTitle;//获取当前正在浏览的网页标题
StatusText;//获取当前状态栏的文本
Url;//获取当前正在浏览的网址的Uri
ReadyState;//获取浏览的状态

常用事件

DocumentCompleted//承载的文档全部加载后发生

获取控件的值

//input取值
webBrowser1.Document.All["控件ID"].GetAttribute("value");
webBrowser1.Document.GetElementById("控件ID").GetAttribute("value");
//非input取值
webBrowser1.Document.All["控件ID"].InnerText;
webBrowser1.Document.GetElementById("控件ID").InnerText;

给输入框赋值

HtmlElement he = webBrowser1.Document.GetElementById("控件ID");
//input赋值
he.InnerText = "内容";
he.SetAttribute("value", "值");
//下拉框赋值
he.SetAttribute("value", "question1");
//复选框
he.SetAttribute("Checked", "True");
//多选框
he.SetAttribute("checked", "checked");

网页中的元素包含:属性、属性的值、html标记、文本。

HtmlElement对象:

GetAttribute("value");//获取属性value的值

SetAttribute("value", "123");//设置属性value的值为123

InnerText;//获取元素下的文本

InnerHtml;//获取元素下的html标记

操作元素的子元素或父元素

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

Parent;//获取元素的父元素

FirstChild;//获取元素的子元素

Children;//获取元素的子元素的集合

获取元素样式

webBrowser1.Document.GetElementById("元素ID").Style;

自动提交、自动点击

webBrowser1.Document.GetElementById("元素ID").InvokeMember("Click");

屏蔽脚本错误

webBrowser1.ScriptErrorsSuppressed = true;

控件聚焦

webBrowser1.Select();
webBrowser1.Focus();
webBrowser1.Document.GetElementById("元素ID").Focus();

设置编辑模式

webBrowser1.DocumentText=string.Empty;
webBrowser1.Document.ExecCommand("EditMode",false,null);
webBrowser1.Document.ExecCommand("LiveResize",false,null);
//编辑模式下后台写入内容
webBrowser1.Document.Write(@"现在");
//如果在编辑模式下这样设置的话就不能再编辑了
webBrowser1.DocumentText=@"现在";

获取主体内容

webBrowser1.Document.Body.InnerText;
webBrowser1.Document.Body.InnerHtml;

执行页面脚本

Object[] objArray = new Object[1];
objArray[0] = (Object)"webbrowser";
webBrowser1.Document.InvokeScript("runabc", objArray);
webBrowser1.Document.InvokeScript("return false")

获取网页中的Iframe

HtmlDocument docFrame = webBrowser1.Document.Window.Frames["mainFrame"].Document;
HtmlDocument docFrame = webBrowser1.Document.All.Frames["mainFrame"].Document;

打开新链接的处理方法

private void NavigateNewURL(WebBrowser web, ref string address)
{
if (address.Equals("about:blank")) return;
if (!address.StartsWith("http://")) address = "http://" + address;
try
{
web.Navigate(new Uri(address));
}
catch (System.UriFormatException)
{
return;
}
}

处理新打开的链接

private void webBrowser1_NewWindow(object sender, CancelEventArgs e)
{
Uri a = new Uri(webBrowser1.Document.ActiveElement.GetAttribute("href"));
webBrowser1.Navigate(a);
e.Cancel = true;//取消在默认浏览器中打开
}

WebBrowser脚本错误的解决方案

这种方法不能彻底解决,可以部分解决问题。

//捕获控件的错误
this.WebBrowser.Document.Window.Error += new HtmlElementErrorEventHandler(Window_Error);
//对错误进行处理
void Window_Error(object sender, HtmlElementErrorEventArgs e)
{
// 自己的处理代码
e.Handled = true;
}

上面的方法对于多个框架嵌套等等的情形还是不能很好的解决。

附录:

属性

说明

 Application

如果该对象有效,则返回掌管WebBrowser控件的应用程序实现的自动化对象(IDispatch)。如果在宿主对象中自动化对象无效,这个程序将返回WebBrowser
控件的自动化对象

 Parent

返回WebBrowser控件的父自动化对象,通常是一个容器,例如是宿主或IE窗口

 Container

返回WebBrowser控件容器的自动化对象。通常该值与Parent属性返回的值相同

 Document

为活动的文档返回自动化对象。如果HTML当前正被显示在WebBrowser中,则
Document属性提供对DHTMLObjectModel的访问途径

 TopLevelContainer

返回一个Boolean值,表明IE是否是WebBrowser控件顶层容器,是就返回true

 Type

返回已被WebBrowser控件加载的对象的类型。例如:如果加载.doc文件,就会返
MicrosoftWordDocument

 Left

返回或设置WebBrowser控件窗口的内部左边与容器窗口左边的距离

 Top

返回或设置WebBrowser控件窗口的内部左边与容器窗口顶边的距离

 Width

返回或设置WebBrowser窗口的宽度,以像素为单位

 Height

返回或设置WebBrowser窗口的高度,以像素为单位

 LocationName

返回一个字符串,该字符串包含着WebBrowser当前显示的资源的名称,如果资源
是网页就是网页的标题;如果是文件或文件夹,就是文件或文件夹的名称

 LocationURL

返回WebBrowser当前正在显示的资源的URL

 Busy

返回一个Boolean值,说明WebBrowser当前是否正在加载URL,如果返回true
就可以使用stop方法来撤销正在执行的访问操作

事件:

PrivateEvents

Description

BeforeNavigate2

导航发生前激发,刷新时不激发

CommandStateChange

当命令的激活状态改变时激发。它表明何时激活或关闭BackForward
菜单项或按钮

DocumentComplete

当整个文档完成是激发,刷新页面不激发

DownloadBegin

当某项下载操作已经开始后激发,刷新也可激发此事件

DownloadComplete

当某项下载操作已经完成后激发,刷新也可激发此事件

NavigateComplete2

导航完成后激发,刷新时不激发

NewWindow2

在创建新窗口以前激发

OnFullScreen

FullScreen属性改变时激发。该事件采用VARIENT_BOOL的一个输
入参数来指示IE是全屏显示方式(VARIENT_TRUE)还是普通显示方式(VARIENT_FALSE)

OnMenuBar

改变MenuBar的属性时激发,标示参数是VARIENT_BOOL类型的。
VARIANT_TRUE是可见,VARIANT_FALSE是隐藏

OnQuit

无论是用户关闭浏览器还是开发者调用Quit方法,当IE退出时就会激发

OnStatusBar

OnMenuBar调用方法相同,标示状态栏是否可见。

OnToolBar

调用方法同上,标示工具栏是否可见。

OnVisible

控制窗口的可见或隐藏,也使用一个VARIENT_BOOL类型的参数

StatusTextChange

如果要改变状态栏中的文字,这个事件就会被激发,但它并不理会程序是否有状态栏

TitleChange

Title有效或改变时激发

参考: C# WinForm开发系列 - WebBrowser - peterzb - 博客园

Winform控件学习笔记【第四天】——WebBrowser的更多相关文章

  1. Winform控件学习笔记【第二天】——常用控件

    背景:期末考试刚过就感冒了,嗓子火辣辣的,好难受.但是一想起要学习总结就打起精神来了,Winform控件网上也没有多少使用教程,大部分都是自己在网上零零散散的学的,大部分用的熟了,不总结会很容易忘得. ...

  2. WinForm控件学习笔记【第一天】——Control类

    感悟:明天就又是学校双选会的日子了.两年我都参与了学校的双选会的服务工作,现在该是双选会服务的我时候了.怎么样找到一份好的工作,或者说怎么样学习才能符合企业对人才的要求,我现在也是很迷茫.平时都是在看 ...

  3. Winform控件学习笔记【第六天】——TreeView

    TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录.TreeView控件中的各项信息都有一个与之相关的Node对象.TreeView显示Node对象的分层目录结构,每个 ...

  4. Winform控件学习笔记【第五天】——ListView

    [第五天] 常用的基本属性: FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. GridLines:设置行和列之间是否显示网格线.( ...

  5. Winform控件学习笔记【第三天】——ListBox

    1. 属性事件列表: SelectionMode    组件中条目的选择类型,即多选(Multiple).单选(Single) Rows             列表框中显示总共多少行 Selecte ...

  6. 转)delphi chrome cef3 控件学习笔记 (二)

    (转)delphi chrome cef3 控件学习笔记 (二) https://blog.csdn.net/risesoft2012/article/details/51260832 原创 2016 ...

  7. C# WinForm调用UnityWebPlayer Control控件 <学习笔记1>

    工具 1.三维场景 Unity 5.0.2f1 2.开发环境Microsoft Visual Studio 2010 3.需要使用的控件 UnityWebPlayer Control 出现的问题及解决 ...

  8. dev控件学习笔记之----CxGrid

    本人总结的DEV学习:希望对大家有所帮助. 一.是否显示分组工具: 二.表格左边记录信息显示的宽度: 三.设置表格行高: 四.表头文件的水平和垂直设置:多个设置用按住SHIFT后进行多选,然后就可以设 ...

  9. Corelocation及地图控件学习笔记

    Corelocation基本使用 在地图章节的学习中,首先要学的便是用户位置定位,因此我们首先要掌握Corelocation的使用.(在IOS8以前可以系统会直接请求授权,现在需要我们自己调用方式通知 ...

随机推荐

  1. redis使用日志(4):如何让外部服务器访问

    开启redis 允许外网IP 访问 在 Linux 中安装了redis 服务,当在客户端通过远程连接的方式连接时,报could not connect错误. 错误的原因很简单,就是没有连接上redis ...

  2. js实现类似qq表情(插入图片以及获取光标的效果)

    <!doctype html><html style="height:100%"><head><meta charset="ut ...

  3. iOS中大文件下载(单线程下载)

    主要是需要注意,在客服端发请求给服务器的时候,在请求头里是可以设置服务器返回的数据从哪开始,到哪结束的. 当服务器响应客户端时,是可以拿到服务器返回数据具体类型以及大小的 思路: 在接收到服务器响应时 ...

  4. 02-老马jQuery教程-jQuery事件处理

    1. 绑定简单事件 在DOM中DOM0级绑定事件的方式是直接给事件属性赋值,但是这样有个缺点就是每次指定的事件处理程序会把之前的覆盖掉. jQuery简单绑定事件的方式,可以让我绑定多个事件处理程序跟 ...

  5. 07Vue.js快速入门-Vue路由详解

    对于前端来说,其实浏览器配合超级连接就很好的实现了路由功能.但是对于单页面应用来说,浏览器和超级连接的跳转方式已经不能适用, 所以各大框架纷纷给出了单页面应用的解决路由跳转的方案. Vue框架的兼容性 ...

  6. resource.h

    resource.h就是.rc文件的头文件.rc文件里的常量全在resource.h定义 .rc文件和resource.h 都是给project add resource 的时候VS 自动生成的.一般 ...

  7. PowerDesigner导入java类生成类图

    1;打开PowerDesigner 2;file—>Reverse Engineer—>Object Language... 3;弹出一个对话框,在General模块下Model Name ...

  8. [uart]linux串口的阻塞非阻塞切换

    比如写的时候设置为阻塞,读的时候设置为非阻塞,就需要下面的切换方式 1.获取文件的flags,即open函数的第二个参数: flags = fcntl(fd,F_GETFL,0); 2.设置文件的fl ...

  9. Android(我还是个菜鸟)——UI-开源框架ImageLoader的完美例子

    开源框架ImageLoader 可在文件里面找——Desktop.zip(原文件为jar格式) 使用这个框架的好处: 让图片能在异步加载更加流畅,可以显示大量图片,在拖动ListView的时候不会出现 ...

  10. c# 利用反射清除事件

    控件的事件清除,除了-=,就只能依靠反射来执行了. /// <summary> /// 清除一个对象的某个事件所挂钩的delegate /// </summary> /// & ...