与html操作

关于Winform中嵌入Htm页面的方法 关于Winform中嵌入Html页面,可以使用Winform中的 WebBrowser控件来实现。 具体操作如下: 1、创建一个Winfrom界面,在Winform界面中添加WebBrowser控件,增加几个按钮(按钮数量视具体情况,用做打开Html页面) 2、打开页面,首先要确定页面的路径,打开页面的方式有三种: stringpathName ="";//定义一个参数用于存放页面路径。 //第一种:打开项目路径中的htm文件 ... 阅读详情

 转自:https://www.cnblogs.com/lsgsanxiao/p/4748306.html

前言

  在 Window Form 应用程序如果需要浏览网页时可以崁入 WebBrowser 控件,但如果需要操作崁入的 HTML 的网页元素,就需要额外的操作,以下纪录几种操作 HTML 元素的方法以及会碰到的问题。

建立 WinForm 应用程序

  首先先建立一个 Window Form 应用程序,在 Form1 窗体上拉入一个 Button 与 WebBrowser 控件,如下

 

\
 
在 Button1 事件中使用 WebBrowser.Navigate 方法加载指定的网页,如下

1.private void button1_Click(object sender, EventArgs e)
2.{
3.webBrowser1.Navigate(Application.StartupPath + "\\Page.html");
4.}
直接执行程序后点击「前往网页」按钮就能够看到网页已经加载 WebBrowser 控件中,如下
 

\
 

操作 HTML 网页中的元素

  接下来如需要针对 HTML 网页上的元素进行控制时,可以透过 WebBrowser 控件提供的方法来处理,首先要在网页加载完成后才进行操作,点选 WebBrowser 控件加入 DocumentCompleted 事件,DocumentCompleted 事件是当网页文件完全加载后即会触发,就可以透过 Document、DocumentText、或 DocumentStream 属性取得网页内容,如下。

 

01.private void webBrowser1_DocumentCompleted
02.(object sender, WebBrowserDocumentCompletedEventArgs e)
03.{
04.if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
05.{
06.ThreadPool.QueueUserWorkItem(o =>
07.{
08.FormWork();
09.}); 
10.}
11.}
12. 
13.private void FormWork()
14.{
15.// 進行操作
16.}
  透过 WebBrowser.ReadyState 属性可以知道网页使否已经加载完成,当加载完成后就使用 Thread 委派 FormWork 方法来处理网页元素的操作,相关操作方法以下列出几项。

操作文字框

1.webBrowser1.Document.GetElementById("name").SetAttribute("value", "Arvin");

操作下拉选单

1.HtmlElementCollection opts = webBrowser1.Document.
2.GetElementById("sex").GetElementsByTagName("option");
3.foreach (HtmlElement opt in opts)
4.{
5.if (opt.GetAttribute("value") == "男")
6.opt.SetAttribute("selected", "selected");
7.}
操作单选框

 

1.HtmlElementCollection opts = webBrowser1.Document.
2.GetElementsByTagName("input").GetElementsByName("skill");
3.foreach (HtmlElement opt in opts)
4.{
5.if (opt.GetAttribute("value") == "WebForm")
6.opt.InvokeMember("click");
7.}
执行 JavaScript 方法 (不需写入左右括号符号)

 

1.webBrowser1.Document.InvokeScript("ShowInfo");
取得网页内崁 iFrame 网页的内容方法

 

1.webBrowser1.Document.Window.Frames[0].Document
  以上列出几种操作网页元素的做法,不外乎就是取得元素对象再透过 SetAttribute 方法来取得或设定值,最后将几种操作方式组合后来测试自动输入窗体的功能并且希望输入窗体时能够一步一步输入,所以加入 Sleep 方法停顿一秒钟,如下

 

01.private void FormWork()
02.{
03.webBrowser1.Document.GetElementById("name").SetAttribute("value", "Arvin");
04.Thread.Sleep(1000);
05. 
06.webBrowser1.Document.GetElementById("phone").SetAttribute("value", "0912345678");
07.Thread.Sleep(1000);
08. 
09.HtmlElementCollection opts = webBrowser1.Document.
10.GetElementById("sex").GetElementsByTagName("option");
11.foreach (HtmlElement opt in opts)
12.{
13.if (opt.GetAttribute("value") == "男")
14.opt.SetAttribute("selected", "selected");
15.}
16.Thread.Sleep(1000);
17. 
18.HtmlElementCollection opts2 = webBrowser1.Document.
19.GetElementsByTagName("input").GetElementsByName("skill");
20.foreach (HtmlElement opt in opts2)
21.{
22.if (opt.GetAttribute("value") == "WebForm")
23.opt.InvokeMember("click");
24.}
25.Thread.Sleep(1000);
26. 
27.webBrowser1.Document.InvokeScript("ShowInfo");
28.}
完成后执行程序代码上就会跳出 InvalidCastException 错误,如下
 

\
 

  其原因是因为执行绪安全的关系,无法在非主执行绪的线程下操作 UI 控件,在以上的程序代码中直接在 Thread 方法中取得 webBrowser1 控件进行操作因而导致了错误发生。

  调整程序代码先使用 Control.InvokeRequired 属性来判断是否在主执行绪下执行,若不是的话则呼叫 Invoke 方法指定委派,如下。

 

01.private delegate void FormWorkDelegate();
02. 
03.private void FormWork()
04.{
05.if (webBrowser1.InvokeRequired)
06.webBrowser1.Invoke(new FormWorkDelegate(FormWork));
07.else
08.{
09.webBrowser1.Document.GetElementById("name").SetAttribute("value", "Arvin");
10.Thread.Sleep(1000);
11. 
12.webBrowser1.Document.GetElementById("phone").SetAttribute("value", "0912345678");
13.Thread.Sleep(1000);
14. 
15.HtmlElementCollection opts = webBrowser1.Document.
16.GetElementById("sex").GetElementsByTagName("option");
17.foreach (HtmlElement opt in opts)
18.{
19.if (opt.GetAttribute("value") == "男")
20.opt.SetAttribute("selected", "selected");
21.}
22.Thread.Sleep(1000);
23. 
24.HtmlElementCollection opts2 = webBrowser1.Document.
25.GetElementsByTagName("input").GetElementsByName("skill");
26.foreach (HtmlElement opt in opts2)
27.{
28.if (opt.GetAttribute("value") == "WebForm")
29.opt.InvokeMember("click");
30.}
31.Thread.Sleep(1000);
32. 
33.webBrowser1.Document.InvokeScript("ShowInfo");
34.}
35.}
  在次执行后发现不会跳出错误讯息了,但是却发生另一个问题,就是当页面加载后在填入窗体值时程序会停顿一段时候才一次显示所以字段的值,这样的结果并不符合当初所要一步一步的填入窗体的需求,如下

 



 
  这种问题在我此篇MSDN发问中 ThankfulHeart 大有提到,Invoke 方法是使用 UI 的线程,而如果在 UI 线程中使用了 Sleep 方法将导致 UI 画面被阻塞,因此才让画面陷入了停顿的状态。

  而在 FormWork 方法中我将操作的方法都包含在 Invoke 的程序区块中,所以在此如要避免长时间的画面阻塞,应该要尽可能的切割使用到 Invoke 的区段,因此修改程序如下。

 

01.private void FormWork()
02.{
03.this.Invoke(new MethodInvoker(() =>
04.{
05.webBrowser1.Document.GetElementById("name").SetAttribute("value", "Arvin");
06.}));
07.Thread.Sleep(1000);
08. 
09.this.Invoke(new MethodInvoker(() =>
10.{
11.webBrowser1.Document.GetElementById("phone").SetAttribute("value", "0912345678");
12.}));
13.Thread.Sleep(1000);
14. 
15.this.Invoke(new MethodInvoker(() =>
16.{
17.HtmlElementCollection opts = webBrowser1.Document.
18.GetElementById("sex").GetElementsByTagName("option");
19.foreach (HtmlElement opt in opts)
20.{
21.if (opt.GetAttribute("value") == "男")
22.opt.SetAttribute("selected", "selected");
23.}
24.}));
25.Thread.Sleep(1000);
26. 
27.this.Invoke(new MethodInvoker(() =>
28.{
29.HtmlElementCollection opts2 = webBrowser1.Document.
30.GetElementsByTagName("input").GetElementsByName("skill");
31.foreach (HtmlElement opt in opts2)
32.{
33.if (opt.GetAttribute("value") == "WebForm")
34.opt.InvokeMember("click");
35.}
36.}));
37.Thread.Sleep(1000);
38. 
39.this.Invoke(new MethodInvoker(() =>
40.{
41.webBrowser1.Document.InvokeScript("ShowInfo");
42.}));
43.}
透过切割每个动作呼叫对应的 Invoke 去执行后执行结果如下
 



 

 以上就是一个简单使用 WinForm 的 WebBrowser 控件控制网页元素的方式,在此纪录一下做法。

范例程序代码


http://www.it165.net/uploadfile/2013/1017/20131017072343466.rar

 

DOM HTML:深入解析网页元素的操作与管理 DOM 是一种用于解析和操作 HTML 或 XML 文档的对象模型。它将文档中的每个元素都表示为一个对象,使得开发者可以轻松地访问和修改这些元素。DOM 和 HTML 是构建网页的基石。通过熟练掌握 DOM 操作,开发者可以更好地实现网页的交互和功能。本文对 DOM 和 HTML 的关系进行了详细解析,并介绍了 DOM 操作的基本方法。希望对您有所帮助。 阅读详情

相关推荐

使用WinForm中的WebBrowser控件加载百度地图API版本不显示.NET

在DocumentCompleted事件处理程序中,我们首先检查事件中的URL是否与WebBrowser的URL相匹配,以确保我们正在处理正确的事件。在script元素的onload事件中,我们创建了一个新的BMap.Map对象,以便在页面中显示地图。通过在WebBrowser的DocumentCompleted事件中注入JavaScript代码,我们可以确保正确加载百度地图API并显示地图。现在,当您运行应用程序并加载窗体时,WebBrowser控件将加载百度地图API,并在地图容器中显示地图。

python_git301的博客 416

【WinForm】WinForm中使用webBrowser1

WinForm调用浏览器

杰西笔记 1796

掌握HTML文档元素的查询与操作技巧

本文以《Working with HTML》书籍章节内容为基础,详细介绍了如何使用现代浏览器提供的开发者工具和API来操作和查询网页元素。内容涵盖了使用querySelectorAll()配合forEach()来遍历节点列表、为元素添加点击事件监听器、查找共享特定属性的元素、访问特定类型的元素集合以及使用Selectors API来发现子元素和更改元素的类值。文章强调了使用现代方法的优势,并提供了在不支持这些现代方法的旧浏览器(如IE)下的兼容性解决方案。

weixin_31776191的博客 975

WinForm使用WebBrowser操作HTML页面的Element

前言   在 Window Form 应用程序如果需要浏览网页时可以崁入 WebBrowser 控件,但如果需要操作崁入的 HTML 的网页元素,就需要额外的操作,以下纪录几种操作 HTML 元素的方法以及会碰到的问题。 建立 WinForm 应用程序   首先先建立一个 Window Form 应用程序,在 Form1 窗体上拉入一个 Button 与 WebBrowser 控件,...

weixin_30825581的博客 761

JavaScript与HTML实现图片交互操作

在数字时代的视觉艺术中,图片动态效果为网页提供了更加丰富的用户体验。无论是社交媒体的图片轮播,还是在线商城的商品展示,动态效果都扮演着至关重要的角色。动态效果让静态图片变得生动,让用户的互动更加直观和有趣。而实现这一切,需要深入理解HTML、CSS和JavaScript的基础知识,并在此基础上运用高级技术。本章将概述图片动态效果的重要性及其在现代网站设计中的作用,为后续章节的学习打下坚实基础。

weixin_42513928的博客 1130

Python文件操作与HTML基础教程

本篇博客将介绍Python语言中文件的打开、读取、写入、关闭操作以及如何处理异常。同时,也将探讨HTML的基础知识,包括标签的定义和作用,以及如何创建一个简单的HTML网页。

weixin_29496633的博客 671

HTMLObject:构建与操作HTML对象的强大工具

HTMLObject:构建与操作HTML对象的强大工具 在现代Web开发中,HTML的构建与操作是开发者日常工作中不可或缺的一部分。无论是简单的静态页面还是复杂的动态应用,高效的HTML操作工具都能极大地提升开发效率。今天,我们要介绍的是一款名为HTMLObject的开源项目,它为开发者提供了一套强大的类库,用于创建和操作HTML对象的抽象。 项目介绍 HTMLObject是一个基于PHP的HTM...

gitblog_00269的博客 747

掌握Python文件操作与HTML基础

本文深入探讨了Python中文件的读写操作,包括文件打开、读取特定行、追加内容、创建新文件、删除文件等方法。同时,介绍了异常处理的三种主要方法:try, except, finally,以及如何创建自定义异常。此外,文章还对HTML进行了基础介绍,包括标签的定义、属性和元素的概念,以及创建基本HTML网页的结构。

weixin_33240461的博客 419

Silverlight 与HTML元素交互操作

Silverlight 与HTML元素交互操作 Silverlight  中的HtmlPage 和 HtmlElement 分别代表HTML页面和HTML元素 获取HTML元素改变他的属性 <div> <img id="img1" src="Images/logo.jpg" /> </div> ...

博客 84

R语言中HTML标签的创建与操作

本文基于《R语言中HTML标签的创建与操作》章节内容,详细介绍了如何使用R语言和{htmltools}包来创建和管理HTML标签。从添加新标签、使用HTML()函数、到标签的结构和属性的定义,文章逐步深入探讨了R语言在前端开发中的应用,提供了实用的代码示例和最佳实践。

weixin_36474001的博客 244

HTML表单元素操作与实战源码解析

htmltable {th, td {th {pre {简介:HTML表单是Web开发中用户与页面交互的核心组件,本资源“HTML常用表单元素操作源码”系统讲解了如何使用HTML、JavaScript和JQuery对表单元素进行操作与事件处理。内容涵盖常见表单控件(如input、select、radio、checkbox)、属性设置、事件监听、表单验证、AJAX异步提交等关键技术点,帮助开发者掌握前端交互功能的实现方法,提升网页开发的实战能力。

weixin_42629522的博客 898

HTML5的文件操作与拖放操作

file对象和FileList对象 ArrayBuffer对象与ArrayBufferView对象 Blob对象 FileReader接口 拖放API DataTransfer对象的属性与方法 拖放的应用

YanHSama的博客 986

动态操作HTML表格与DOM元素管理技巧

本章主要介绍了如何使用JavaScript和DOM方法动态地操作HTML表格数据,包括使用CSS选择器选取特定表格单元格、计算表格中数据的总和,并将其添加到表格末尾。同时,还讲解了如何向表格中添加或删除行,并提供了隐藏页面部分和创建基于悬停弹出信息窗口的示例。通过这些技术,可以方便地管理网页中的表格数据以及改善用户界面的交互性。

weixin_42593549的博客 439

Visdom:Rust中的HTML解析与DOM操作利器

Visdom:Rust中的HTML解析与DOM操作利器 项目介绍 Visdom 是一个用Rust编写的HTML解析与DOM操作库,其API设计灵感来源于广受欢迎的JavaScript库jQuery。Visdom专注于提供类似于jQuery的DOM操作功能,同时去除了仅在浏览器环境中有效的部分(如渲染和事件相关方法)。这使得Visdom不仅适用于HTML抓取,还能用于处理和修改HTML文本节点,非常...

gitblog_00586的博客 737

HTML表格数据操作与动态更新

本文探讨了如何在HTML表格中操作数据,包括使用document.querySelectorAll()来访问特定数据,以及如何利用JavaScript对表格数据进行求和和动态更新。同时,文章还涉及了如何向表格添加或删除行,以及如何隐藏和显示页面的部分内容。

weixin_35811662的博客 482

HtmlAgilityPack:高效的.NET HTML分析与操作工具

HtmlAgilityPack 是.NET平台上的一个强大HTML解析器,它允许开发者在内存中加载和操作HTML文档,就像操作DOM树一样。这个库能够解析不规范的HTML文档,并提供了强大的节点选择和修改功能。尽管它不像正统的XML解析器那样严格,但它在处理真实世界中的网页内容时表现出更高的灵活性和适应性。使用HtmlAgilityPack可以极大简化网络爬虫、数据抓取、内容提取等任务,对于需要从网页中提取结构化数据的开发者而言,它是一个不可或缺的工具。

weixin_34162851的博客 1044

如何使用PHP Html Parser:超简单的HTML解析与操作指南

PHP Html Parser 是一个强大的HTML DOM解析工具,它允许你轻松操作HTML内容,使用类似jQuery的选择器在HTML页面中查找标签。无论是网页数据抓取、内容分析还是HTML处理,这个工具都能帮你快速实现需求。 ## 🌟 为什么选择PHP Html Parser? PHP Html Parser提供了直观的API和灵活的选择器,让HTML解析变得简单: - **jQuer

gitblog_00217的博客 483

c#winform中完美代替WebBrowser最新的控件geckofx33支持flash例子demo

c#winform中完美代替WebBrowser最新的控件geckofx33支持flash例子demo 经历了webbrowser 内存溢出 排版错误等各种问题 终于找到了一个解脱模式,就是使用firefox内核的现阶段代替webbrowser最好的控件了。 例子中包含了运行库 控件 代码调用演示 拿去可直接嵌入到你的工作项目中,vs2015up1调试通过,.net4框架

上一篇: json序列化
下一篇: html 列表列出数据
Bill11YAng
博客等级 码龄14年 165粉丝 230原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值