版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
HtmlDocument类提供了HTML文档的顶级编程访问,配合WebBrowser的 Document属性使用,可以获得WebBrowser当前页面的相关信息。
HtmlDocument常用属性:
- ActiveElement:当前活动的网页元素。
- ActiveLinkColor:超链接被用户单击后的Color。
- All:获得网页元素集合,它包含该网页所有的元素。这是一个HtmlElementCollection类。
- BackColor:网页背景色。
- Body:获取网页的BODY元素。
- Cookie:网页关联的Cookie,各个Cookie之间由分号隔开。
- DefaultEncoding:网页的默认编码。
- Domain:网页所在的域。
- DomDocument:获取此 HtmlDocument 的非托管接口指针。
- Encoding:此文档的字符编码。
- Focused:指示文档是否具有用户输入焦点。
- ForeColor:网页的前景色。
- Forms:获取网页中所有表单元素的集合。
- Images:获取文档中所有图像标记的集合。
- LinkColor:超链接的颜色。
- Links:获取网页中所有超链接的集合。
- RightToLeft:当前网页中文本的方向。文本从右向左呈现为True;否则为False.
- Title:当前网页的标题。
- Url:网页的Url。
- VisitedLinkColor:用户已经访问的链接的颜色。
- Window:获取与此文档关联的窗口,这是一个HtmlWindow类。
HtmlDocument常用方法:
- CreateElement:新建一个指定HTML标记类型的HtmlElement。
- ExecCommand:对文档执行指定的命令。
- Focus:在当前文档上设置用户输入焦点。
- GetElementById:将元素的 ID 特性用作搜索键来检索单个HtmlElement。
- GetElementFromPoint:检索位于指定工作区坐标位置的HTML元素。
- GetElementsByTagName:检索具有指定HTML标记的元素集合。
- InvokeScript:执行在HTML页面中定义的活动脚本函数。
- OpenNew:获取一个新的HtmlDocument,以便与Write方法一起使用。注意:此方法将清除先前加载的文档,包括任何关联状态,如变量。但它不会导致WebBrowser中的导航事件引发。
- Write:编写一个新的 HTML 页。该文档将取代以前的 HTML 文档。注意:若要只更改文档的特定部分,应获取相应的HtmlElement并设置其InnerHtml属性。
23.2.1 获得网页相关信息
【例 23.3】【项目:code23-003】获得网页相关信息。
private void btnNavigate_Click(object sender, EventArgs e)
{
WebBrowser1.Navigate(txtUrl.Text);
}
//获得网页基本信息
private void btnInfo_Click(object sender, EventArgs e)
{
string htmlInfo = "";
HtmlDocument document;
//需要WebBrowser控件网页载入完成
document = WebBrowser1.Document;
htmlInfo += "网页背景色:" + document.BackColor.ToString() + "\r\n";
htmlInfo += "网页前景色:" + document.ForeColor.ToString() + "\r\n";
htmlInfo += "网页标题:" + document.Title + "\r\n";
htmlInfo += "网址:" + document.Url.ToString() + "\r\n";
htmlInfo += "Cookie:" + document.Cookie + "\r\n";
htmlInfo += "所在域:" + document.Domain + "\r\n";
htmlInfo += "网页编码:" + document.Encoding + "\r\n";
htmlInfo += "链接颜色:" + document.LinkColor.ToString() + "\r\n";
htmlInfo += "链接访问颜色:" + document.VisitedLinkColor.ToString() + "\r\n";
txtInfo.Text = htmlInfo;
}
//获得网页所有图片信息
private void btnImgInfo_Click(object sender, EventArgs e)
{
string htmlInfo = "";
int imgCount = 0;
HtmlElementCollection imgs;
imgs = WebBrowser1.Document.Images;
foreach(HtmlElement img in imgs)
{
imgCount += 1;
htmlInfo += "图片" + imgCount + ": " + img.OuterHtml + "\r\n";
}
txtInfo.Text = htmlInfo;
}
//获得网页所有链接信息
private void btnLinkInfo_Click(object sender, EventArgs e)
{
string htmlInfo = "";
int linkCount = 0;
HtmlElementCollection lnks;
lnks = WebBrowser1.Document.Links;
foreach(HtmlElement lnk in lnks)
{
linkCount += 1;
htmlInfo += "链接" + linkCount + ": " + lnk.OuterHtml + "\r\n";
}
txtInfo.Text = htmlInfo;
}
//获得网页所有元素信息
private void btnElementInfo_Click(object sender, EventArgs e)
{
string htmlInfo = "";
int elementCount = 0;
HtmlElementCollection htmlAlls;
htmlAlls = WebBrowser1.Document.All;
foreach(HtmlElement htmlSingle in htmlAlls)
{
elementCount += 1;
htmlInfo += "元素" + elementCount + ": " + htmlSingle.TagName.ToUpper() + "\r\n";
}
txtInfo.Text = htmlInfo;
}
运行结果如下图所示:
图23-4 获取网页所有图片的信息
23.2.2 执行指定的命令
使用HtmlDocument类的ExecCommand方法,可以指定对象执行某个动作,例如插入新的 HTML 元素,选择文本和设置文本格式,以及清除缓存的任何身份验证凭据等,通常用于对浏览器进行特殊功能调用。
HtmlDocument.ExecCommand方法的用法和html中的脚本调用document.ExecCommand方法类似,具体语法如下:
public void ExecCommand (string command, bool showUI, object value);
参数说明:
- command:要执行的命令的名称。
- showUI:是否向用户显示命令特定的对话框或消息框。
- value:参数command命令需要配合使用的参数,此参数并不适用于所有命令。
详细的命令清单可以参看微软提供的文档Command Identifiers(命令标识符)一节:https://msdn.microsoft.com/zh-cn/library/ms533049(VS.85).aspx,实际使用的时候需要将该文档提供的参数IDM_去掉。例如:
全选网页:
WebBrowser1.Document.ExecCommand("selectAll", false, "");
修改选中的文字大小:
WebBrowser1.Document.ExecCommand("fontsize", false, "5");
【例 23.4】【项目:code23-004】更改网页上选中的文字颜色和大小。
private void btnCommand_Click(object sender, EventArgs e)
{
//设置选中文字颜色,可以使用ColorTranslator的ToHtml方法来转换为网页颜色
WebBrowser1.Document.ExecCommand("ForeColor", false, "red"); // System.Drawing.ColorTranslator.ToHtml(Color.Red));
//设置选中文字大小
WebBrowser1.Document.ExecCommand("fontsize", false, "5");
}
使用时请先选中网页上的一段文字,然后按下【执行命令】按钮。
运行结果如下图所示:
图23-5 使用ExecCommand前后对比
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录