Winform控件学习笔记【第四天】——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();//浏览主页
常用属性
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中,则 |
|
TopLevelContainer |
返回一个Boolean值,表明IE是否是WebBrowser控件顶层容器,是就返回true |
|
Type |
返回已被WebBrowser控件加载的对象的类型。例如:如果加载.doc文件,就会返 |
|
Left |
返回或设置WebBrowser控件窗口的内部左边与容器窗口左边的距离 |
|
Top |
返回或设置WebBrowser控件窗口的内部左边与容器窗口顶边的距离 |
|
Width |
返回或设置WebBrowser窗口的宽度,以像素为单位 |
|
Height |
返回或设置WebBrowser窗口的高度,以像素为单位 |
|
LocationName |
返回一个字符串,该字符串包含着WebBrowser当前显示的资源的名称,如果资源 |
|
LocationURL |
返回WebBrowser当前正在显示的资源的URL |
|
Busy |
返回一个Boolean值,说明WebBrowser当前是否正在加载URL,如果返回true |
事件:
|
PrivateEvents |
Description |
|
BeforeNavigate2 |
导航发生前激发,刷新时不激发 |
|
CommandStateChange |
当命令的激活状态改变时激发。它表明何时激活或关闭Back和Forward |
|
DocumentComplete |
当整个文档完成是激发,刷新页面不激发 |
|
DownloadBegin |
当某项下载操作已经开始后激发,刷新也可激发此事件 |
|
DownloadComplete |
当某项下载操作已经完成后激发,刷新也可激发此事件 |
|
NavigateComplete2 |
导航完成后激发,刷新时不激发 |
|
NewWindow2 |
在创建新窗口以前激发 |
|
OnFullScreen |
当FullScreen属性改变时激发。该事件采用VARIENT_BOOL的一个输 |
|
OnMenuBar |
改变MenuBar的属性时激发,标示参数是VARIENT_BOOL类型的。 |
|
OnQuit |
无论是用户关闭浏览器还是开发者调用Quit方法,当IE退出时就会激发 |
|
OnStatusBar |
与OnMenuBar调用方法相同,标示状态栏是否可见。 |
|
OnToolBar |
调用方法同上,标示工具栏是否可见。 |
|
OnVisible |
控制窗口的可见或隐藏,也使用一个VARIENT_BOOL类型的参数 |
|
StatusTextChange |
如果要改变状态栏中的文字,这个事件就会被激发,但它并不理会程序是否有状态栏 |
|
TitleChange |
Title有效或改变时激发 |
参考: C# WinForm开发系列 - WebBrowser - peterzb - 博客园
Winform控件学习笔记【第四天】——WebBrowser的更多相关文章
- Winform控件学习笔记【第二天】——常用控件
背景:期末考试刚过就感冒了,嗓子火辣辣的,好难受.但是一想起要学习总结就打起精神来了,Winform控件网上也没有多少使用教程,大部分都是自己在网上零零散散的学的,大部分用的熟了,不总结会很容易忘得. ...
- WinForm控件学习笔记【第一天】——Control类
感悟:明天就又是学校双选会的日子了.两年我都参与了学校的双选会的服务工作,现在该是双选会服务的我时候了.怎么样找到一份好的工作,或者说怎么样学习才能符合企业对人才的要求,我现在也是很迷茫.平时都是在看 ...
- Winform控件学习笔记【第六天】——TreeView
TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录.TreeView控件中的各项信息都有一个与之相关的Node对象.TreeView显示Node对象的分层目录结构,每个 ...
- Winform控件学习笔记【第五天】——ListView
[第五天] 常用的基本属性: FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. GridLines:设置行和列之间是否显示网格线.( ...
- Winform控件学习笔记【第三天】——ListBox
1. 属性事件列表: SelectionMode 组件中条目的选择类型,即多选(Multiple).单选(Single) Rows 列表框中显示总共多少行 Selecte ...
- 转)delphi chrome cef3 控件学习笔记 (二)
(转)delphi chrome cef3 控件学习笔记 (二) https://blog.csdn.net/risesoft2012/article/details/51260832 原创 2016 ...
- C# WinForm调用UnityWebPlayer Control控件 <学习笔记1>
工具 1.三维场景 Unity 5.0.2f1 2.开发环境Microsoft Visual Studio 2010 3.需要使用的控件 UnityWebPlayer Control 出现的问题及解决 ...
- dev控件学习笔记之----CxGrid
本人总结的DEV学习:希望对大家有所帮助. 一.是否显示分组工具: 二.表格左边记录信息显示的宽度: 三.设置表格行高: 四.表头文件的水平和垂直设置:多个设置用按住SHIFT后进行多选,然后就可以设 ...
- Corelocation及地图控件学习笔记
Corelocation基本使用 在地图章节的学习中,首先要学的便是用户位置定位,因此我们首先要掌握Corelocation的使用.(在IOS8以前可以系统会直接请求授权,现在需要我们自己调用方式通知 ...
随机推荐
- Lua中的loadfile,dofile,require使用,最后还有调试
1.loadfile---只编译,不运行. loadfile编译代码成中间码并且返回编译后的chunk作为一个函数,而不执行代码:另外loadfile不会抛出错误信息而是返回错误代号. loadstr ...
- 在进行vue的学习,项目中需要引入bootstrap、jquery的步骤。
在进行vue的学习,项目中需要引入bootstrap.jquery的步骤. 一.引入jQuery 在当前项目的目录下(就是package.json),运行命令 cnpm install jquery ...
- 使用typed.js实现页面上的写字功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python处理大数据
起因 Python处理一下数据,大概有六七个G,然后再存到另外一个文件中,单线程跑起来发现太慢了,数据总量大概是千万行的级别,然后每秒钟只能处理不到20行--遂想怎么提高一下速度 尝试1-multip ...
- 1. EM算法-数学基础
1. EM算法-数学基础 2. EM算法-原理详解 3. EM算法-高斯混合模型GMM 4. EM算法-高斯混合模型GMM详细代码实现 5. EM算法-高斯混合模型GMM+Lasso 1. 凸函数 通 ...
- [转]Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数
oracle的分析函数over 及开窗函数 一:分析函数Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组 ...
- git拉取远程分支
查看本地所有分支列表: git branch -a 查看远程所有分支列表: git branch -r 拉取远程分支(使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checko ...
- Spirng MVC启动流程
以Tomcat为例,想在Web容器中使用Spirng MVC,必须进行四项的配置: 修改web.xml,添加servlet定义.编写servletname-servlet.xml( servletna ...
- InstallShield打包,以及集成TFS、JenKins
一. InstallShield打包脚本教程,这里面写的很详细了 [海洋女神原创]一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(一)---基本设置一 需要补充的是Insta ...
- 获取linux内核的配置项(包含模块module)_转
转自:提取已有的内核配置文件 由于有时候所做的内核配置文件需要移植到其他的内核源码中,此时又忘了保存,这时以下方法就可以满足你了. 1.首先这两个配置的位于(init/Kconfig): 2. 如果要 ...