23.2 HtmlDocument类
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
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#教程 目录
相关文章:
23.2 HtmlDocument类
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 HtmlDocument类提供了HTML文档的顶级编程访问,配合WebBrowser的 Document属性使用,可以获得WebBrowser当前页…...
wordpress adrotate插件 文件上传漏洞
当你爆破进wordpress后台但权限不是管理员的时,如果你有adrotate插件操作权限可以用adrotate的文件上传功能get webshell 该漏洞需要AdRotate版本 < 5.13.3 第一步按顺序点击上传文件 在这里文件一定要压缩成zip格式,上传的时候也是上传这个zip 上…...
数据分析和数据挖掘的工作内容
基本的数据分析工作通常包含以下几个方面的内容: 确定目标(输入):理解业务,确定指标口径。获取数据:数据仓库(SQL提数)、电子表格、三方接口、网络爬虫、开放数据集等。清洗数据&am…...
【Pandas】pandas Series sample
Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐,使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…...
qt + opengl 给立方体增加阴影
在前几篇文章里面学会了通过opengl实现一个立方体,那么这篇我们来学习光照。 风氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子: 1 环境光照(Ambient …...
buuctf-[极客大挑战 2019]Knife题解
一个很简单的web题,进入界面 网页名还加白给的shell,并且给的提示也很明显,给了一个一句话木马再加上菜刀,很怀疑是一个webshell题,那么直接打开蚁剑测试连接拿shell 用提示的一句话木马的密码,测试链接发现…...
常用电脑,护眼软件推荐 f.lux 3400K | 撰写论文 paper
常用电脑?平均每天用 5 个小时?你就要考虑用一个护眼软件了,对皮肤也好。因为电脑屏幕有辐射,比如蓝光。 f.lux 作为一款专业护眼软件,值得使用。之前用了三年的 Iris Pro,现在 f.lux 做的更好了。 使用…...
【操作幂等和数据一致性】保障业务在MySQL和COS对象存储的一致
业务场景 发布信息,更新到数据库MySQLCOS操作,更新JSON文件 不过可能存在幂等性和数据一致性的问题。 // 批量存MySQL entityPublishService.saveOrUpdateBatch(entityPublishList); // 遍历批量存COS对象存储searchEntitys.forEach(req -> {//删除…...
[答疑]领域建模:邓丽君、周杰伦和少女时代
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 第五元素 2025-2-18 17:12 潘老师,画线的这句话,在这个类图中怎么体现呢? (回答者补注:问题的素材来自《邓丽君的领域建模》…...
【鸿蒙开发】第四十三章 Notification Kit(用户通知服务)
目录 1 简介 1.1 使用场景 1.2 能力范围 1.3 业务流程 1.4 通知样式 1.5 约束限制 1.6 与相关Kit的关系 2 请求通知授权 2.1 接口说明 2.2 开发步骤 3 管理通知角标 3.1 接口说明 3.2 开发步骤 4 管理通知渠道 4.1 通知渠道类型说明 4.2 接口说明…...
Ubuntu 20.04源码安装opencv 4.5.0
安装依赖项 sudo apt install -y g sudo apt install -y cmake sudo apt install -y make sudo apt install -y wget unzip安装opencv依赖库 sudo apt-get install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev l…...
buu-get_started_3dsctf_2016-好久不见39
栈溢出外平栈 1外平栈与内平栈的区别 外平栈: 栈帧的局部变量和返回地址之间没有额外的对齐或填充。返回地址直接位于局部变量的上方(即栈顶方向)。在计算偏移时,不需要额外加 4(因为返回地址紧邻局部变量)…...
一周学会Flask3 Python Web开发-客户端状态信息Cookie以及加密
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili HTTP是无状态(stateless)协议。也就是说,在一次请求响应结束后,服务器不会留下任何关于对…...
深入解析Qt事件循环
在Qt开发中,QApplication::exec()这行代码是每个开发者都熟悉的“魔法咒语”。为什么GUI程序必须调用它才能响应操作?为何耗时操作会导致界面冻结?本文将以事件循环为核心,揭示Qt高效运转的底层逻辑,探讨其设计哲学与最…...
python中的异常-模块-包
文章目录 异常异常的定义异常捕获语法捕获常规异常捕获指定异常捕获多个异常捕获所有异常异常else异常finally 异常传递总结 模块概念导入自定义模块及导入main方法all变量 总结 包自定义包定义pycharm中建包的基本步骤导入方式 第三方包 异常 异常的定义 当检测到一个错误时…...
AI 百炼成神:线性回归,预测房价
我们开始第一个项目——线性回归:预测房价。这是一个经典的机器学习入门项目,可以帮助你理解如何使用线性回归模型来预测连续的数值。 第一个项目:线性回归预测房价 项目目标 学习线性回归的基本概念。使用历史房价数据建立一个预测模型。理解如何评估模型的性能。项目步骤…...
Grok-3 与 DeepSeek 的技术架构与性能分析
随着 AI 大模型技术的快速发展,Grok-3(xAI)与 DeepSeek-V3/R1(深度求索)成为近期备受关注的焦点。本文将从技术架构、性能表现、成本效率和应用场景等维度,深入对比分析这两大模型的优劣势。 一、技术架构对比 1. DeepSeek-V3/R1:高效 MoE 架构与工程优化 混合专家模型…...
机器学习实战(4):逻辑回归——分类问题的基础
第4集:逻辑回归——分类问题的基础 在机器学习中,逻辑回归(Logistic Regression) 是解决分类问题的经典算法之一。尽管名字中有“回归”,但它实际上是一种分类模型,广泛应用于二分类任务(如垃圾…...
我是如何从 0 到 1 找到 Web3 工作的?
作者:Lotus的人生实验 关于我花了一个月的时间,从 0 到 1 学习 Web3 相关的知识和编程知识。然后找到了一个 Web3 创业公司实习的远程工作。 👇👇👇 我的背景: 计算机科班,学历还可以(大厂门槛水平) 毕业工…...
基于WebRTC与AI大模型接入EasyRTC:打造轻量级、高实时、强互动的嵌入式音视频解决方案
随着物联网和嵌入式技术的快速发展,嵌入式设备对实时音视频通信的需求日益增长。然而,传统的音视频解决方案往往存在体积庞大、实时性差、互动体验不佳等问题,难以满足嵌入式设备的资源限制和应用场景需求。 针对以上痛点,本文将介…...
【DeepSeek】本地部署,保姆级教程
deepseek网站链接传送门:DeepSeek 在这里主要介绍DeepSeek的两种部署方法,一种是调用API,一种是本地部署。 一、API调用 1.进入网址Cherry Studio - 全能的AI助手选择立即下载 2.安装时位置建议放在其他盘,不要放c盘 3.进入软件后…...
Java 大视界 -- 国际竞争与合作:Java 大数据在全球市场的机遇与挑战(94)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
流程绩效分析,实现销售目标的保障
在当今竞争激烈的商业环境里,客户关系管理(CRM)行业正迎来深刻变革。企业若想在市场中脱颖而出,实现业务的持续增长,流程绩效分析成为关键。通过提供销售全流程绩效分析能力,企业能够针对销售全流程的复杂业…...
Linux NFS
Linux NFS NFS(Network File System)是一种用于在网络上共享文件系统的协议,允许不同的计算机通过网络访问和共享文件,就像访问本地文件一样。它广泛应用于 Linux 和 UNIX 系统中,支持多用户并发访问,适合…...
一文精通JWT Token、ID Token、Access Token、Refresh Token
JWT Token JSON Web Token (JWT,RFC 7519 (opens new window)),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519)。该 token 被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT 的声明一般被用来在身份提供者和服务提供者…...
CSS基础(浮动、相对定位、绝对定位、固定定位、粘性定位、版心、重置默认样式)
文章目录 1. 浮动(float)1.1 简介1.2 元素浮动后的特点1.3 脱离文档流示例图1.4 浮动产生的影响1.4.1 积极影响1.4.2 消极影响 1.5 解决浮动产生的影响1.5.1 清除浮动(Clearfix)1.5.2 创建新的块格式化上下文(BFC&…...
uniapp中引入Vant Weapp的保姆级教学(包含错误处理)
废话不多说,直接上方法,网上的教学好多都是错误的 1.安装vant weapp 在Hbuilder的终端,输入以下代码 npm install vant/weapp -S --production 2.新建wxcomponents文件夹 在项目的跟目录新建一个“wxcomponents’文件夹,与app.…...
Datawhale Ollama教程笔记5
Dify 接入 Ollama 部署的本地模型 Dify 支持接入 Ollama 部署的大型语言模型推理和 embedding 能力。 快速接入 下载 Ollama 访问 Ollama 安装与配置,查看 Ollama 本地部署教程。 运行 Ollama 并与 Llama 聊天 ollama run llama3.1Copy to clipboardErrorCopied …...
STL —— 洛谷字符串(string库)入门题(蓝桥杯题目训练)(二)
目录 一、B2121 最长最短单词 - 洛谷 算法代码: 代码分析 变量定义 输入处理 单词长度计算 更新最长和最短单词的长度 输出最长单词 输出最短单词 评测记录:编辑 二、B2122 单词翻转 - 洛谷 算法代码: 代码分析 引入头文件和定…...
P1055 [NOIP 2008 普及组] ISBN 号码(java)【AC代码】
每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括 9 位数字、1 位识别码和 3 位分隔符,其规定格式如 x-xxx-xxxxx-x,其中符号 - 就是分隔符(键盘上的减号),最后一位是识别码,例如 0…...
JavaScript如何创建一个对象?对象字面量和构造函数创建对象有什么区别?
JavaScript如何创建一个对象?对象字面量和构造函数创建对象有什么区别? JavaScript 创建对象的方式 在 JavaScript 中,有多种方式可以创建对象,这里主要介绍对象字面量和构造函数这两种常见的方式。 1. 对象字面量 对象字面量…...
【量化科普】Sharpe Ratio,夏普比率
【量化科普】Sharpe Ratio,夏普比率 🚀🚀🚀量化软件开通🚀🚀🚀 🚀🚀🚀量化实战教程🚀🚀🚀 在量化投资领域,…...
知识蒸馏知识点
1基于kl散度计算,学生模型需要用log_softmax处理 2 为了避免温度对梯度的影响,loss*T**2 操作目的教师 / 学生输出除以 软化概率分布,暴露类别间关系损失乘以 抵消温度对梯度的缩放,维持梯度量级稳定,确保训练收敛性 import torch import torch.nn.functional as F# 原…...
Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例
1. 版本说明 springboot 版本 3.3.8 Java 版本 17 spring-ai 版本 1.0.0-M5 deepseek 模型 deepseek-r1:7b 需要注意一下Ollama的使用版本: 2. springboot项目搭建 可以集成在自己的项目里,也可以到 spring.io 生成一个项目 生成的话,如下…...
【MySQL】MySQL表的增删改查(进阶)
1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...
装修流程图: 装修前准备 → 设计阶段 → 施工阶段 → 安装阶段 → 收尾阶段 → 入住
文章目录 引言I 毛坯房装修的全流程**1. 装修前准备****1.1 确定装修预算****1.2 选择装修方式****1.3 选择装修公司****1.4 办理装修手续****2. 设计阶段****2.1 量房****2.2 设计方案****2.3 确认方案****3. 施工阶段****3.1 主体拆改****3.2 水电改造****3.3 防水工程****3.…...
JavaScript系列(79)--Web Worker 高级应用
Web Worker 高级应用 🔄 Web Worker 为JavaScript提供了真正的多线程能力,让我们能够在后台线程中执行复杂的计算而不阻塞主线程。今天让我们深入探讨Web Worker的高级应用。 Web Worker 概述 🌟 💡 小知识:Web Work…...
人工智能之自动驾驶技术体系
自动驾驶技术体系 自动驾驶技术是人工智能在交通领域的重要应用,旨在通过计算机视觉、传感器融合、路径规划等技术实现车辆的自主驾驶。自动驾驶不仅能够提高交通效率,还能减少交通事故和环境污染。本文将深入探讨自动驾驶的技术体系,包括感…...
该如何搭建高效的跨境网络专线?
在如今这个全球化的商业环境中,跨境网络专线成为了企业与个人实现高效、安全跨国通信的重要工具。大家好,在接下来的内容中,我将深入为您探讨跨境网络专线的概念、特点以及搭建流程,帮助您更好地理解和利用这一技术。 一、什么是…...
网络运维学习笔记 017HCIA-Datacom综合实验01
文章目录 综合实验1实验需求总部特性 分支8分支9 配置一、 基本配置(IP二层VLAN链路聚合)ACC_SWSW-S1SW-S2SW-Ser1SW-CoreSW8SW9DHCPISPGW 二、 单臂路由GW 三、 vlanifSW8SW9 四、 OSPFSW8SW9GW 五、 DHCPDHCPGW 六、 NAT缺省路由GW 七、 HTTPGW 综合实…...
Redis数据结构-String字符串
1.String字符串 字符串类型是Redis中最基础的数据结构,关于数据结构与要特别注意的是:首先Redis中所有的键的类型都是字符串类型,而且其他集中数据结构也都是在字符串类似基础上进行构建,例如列表和集合的元素类型是字符串类型&a…...
个人简历html网页模板,科技感炫酷html简历模板
炫酷动效登录页 引言 在网页设计中,按钮是用户交互的重要元素之一。这样一款黑色个人简历html网页模板,科技感炫酷html简历模板,设计效果类似科技看板图,可帮您展示技能、任职经历、作品等,喜欢这种风格的小伙伴不要犹豫哦。该素材呈现了数据符号排版显示出人形的动画效…...
【Python爬虫(39)】掌控全局:分布式爬虫的任务管理与监控之道
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
输入框元素覆盖冲突
后端响应中的 "trainingKbGroupName": "基础死型" 通过searchForm2.initFormData(rowData[0]);操作会把基础死型四个字填充到<div class"col-sm-5 form-group"> <label class"col-sm-3 control-label">知识点分组名称<…...
R语言学习笔记——确定指标权重:层次分析法/熵权法/CRITIC方法
本文介绍使用R语言确定指标权重的方法,包括:层次分析法、熵权法和CRITIC方法,内容包含了逆向指标正向化处理。 1、层次分析法 #######层次分析法###### ###几何平均法求权重 options(digits 2) library(tidyverse)macro <- tibble(x1c(…...
前端面试之Box盒子布局:核心知识与实战解析
目录 引言:布局能力决定前端高度 一、盒模型基础:看得见的像素战争 1. 标准盒模型 vs IE盒模型 2. 核心组成公式 3. 视觉格式化模型 二、传统布局三剑客 1. 浮动布局(Float Layout) 2. 定位布局(Position Layou…...
前端VUE+后端uwsgi 环境搭建
1整体架构 请求流程the web clinet--the web server->the socket->uwsgi--django 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;在nginx上加上安全性或其他的限制,可以达到保护程序的作用;uWSGI本…...
保姆级! 本地部署DeepSeek-R1大模型 安装Ollama Api 后,Postman本地调用 deepseek
要在Postman中访问Ollama API并调用DeepSeek模型,你需要遵循以下步骤。首先,确保你有一个有效的Ollama服务器实例运行中,并且DeepSeek模型已经被加载。 可以参考我的这篇博客 保姆级!使用Ollama本地部署DeepSeek-R1大模型 并java…...
【python】pip命令合集
文章目录 1. 包安装与卸载2. 依赖管理与文件操作3. 包下载与构建4. 配置与缓存管理5. 高级调试与日志6. 虚拟环境集成7. 哈希验证与安全8. 实验性功能(可能不稳定)9. 其他实用命令参数大全(全局常用参数)示例场景 conda: 【python…...
【鸿蒙开发】第四十章 Form Kit(卡片开发服务)
目录 1 概述 1.1 卡片使用场景 1.2 服务卡片架构 1.3 亮点/特征 1.4 开发模式 1.5 与相关Kit的关系 1.6 约束限制 2 ArkTS卡片运行机制 2.1 实现原理 2.2 ArkTS卡片的优势 2.3 ArkTS卡片的约束 3 ArkTS卡片相关模块 4 ArkTS卡片开发指导 4.1 创建一个ArkTS卡片 …...