23.2 HtmlDocument类

发布于:2025-02-22 ⋅ 阅读:(17) ⋅ 点赞:(0)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

HtmlDocument类提供了HTML文档的顶级编程访问,配合WebBrowser的 Document属性使用,可以获得WebBrowser当前页面的相关信息。

HtmlDocument常用属性:

  1. ActiveElement:当前活动的网页元素。
  2. ActiveLinkColor:超链接被用户单击后的Color。
  3. All:获得网页元素集合,它包含该网页所有的元素。这是一个HtmlElementCollection类。
  4. BackColor:网页背景色。
  5. Body:获取网页的BODY元素。
  6. Cookie:网页关联的Cookie,各个Cookie之间由分号隔开。
  7. DefaultEncoding:网页的默认编码。
  8. Domain:网页所在的域。
  9. DomDocument:获取此 HtmlDocument 的非托管接口指针。
  10. Encoding:此文档的字符编码。
  11. Focused:指示文档是否具有用户输入焦点。
  12. ForeColor:网页的前景色。
  13. Forms:获取网页中所有表单元素的集合。
  14. Images:获取文档中所有图像标记的集合。
  15. LinkColor:超链接的颜色。
  16. Links:获取网页中所有超链接的集合。
  17. RightToLeft:当前网页中文本的方向。文本从右向左呈现为True;否则为False.
  18. Title:当前网页的标题。
  19. Url:网页的Url。
  20. VisitedLinkColor:用户已经访问的链接的颜色。
  21. Window:获取与此文档关联的窗口,这是一个HtmlWindow类。

HtmlDocument常用方法:

  1. CreateElement:新建一个指定HTML标记类型的HtmlElement。
  2. ExecCommand:对文档执行指定的命令。
  3. Focus:在当前文档上设置用户输入焦点。
  4. GetElementById:将元素的 ID 特性用作搜索键来检索单个HtmlElement。
  5. GetElementFromPoint:检索位于指定工作区坐标位置的HTML元素。
  6. GetElementsByTagName:检索具有指定HTML标记的元素集合。
  7. InvokeScript:执行在HTML页面中定义的活动脚本函数。
  8. OpenNew:获取一个新的HtmlDocument,以便与Write方法一起使用。注意:此方法将清除先前加载的文档,包括任何关联状态,如变量。但它不会导致WebBrowser中的导航事件引发。
  9. 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);

参数说明:

  1. command:要执行的命令的名称。
  2. showUI:是否向用户显示命令特定的对话框或消息框。
  3. 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)

        {

            //设置选中文字颜色,可以使用ColorTranslatorToHtml方法来转换为网页颜色

            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#教程 目录