vbahtml篇.docx

上传人:b****1 文档编号:19082653 上传时间:2023-04-24 格式:DOCX 页数:29 大小:1.80MB
下载 相关 举报
vbahtml篇.docx_第1页
第1页 / 共29页
vbahtml篇.docx_第2页
第2页 / 共29页
vbahtml篇.docx_第3页
第3页 / 共29页
vbahtml篇.docx_第4页
第4页 / 共29页
vbahtml篇.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

vbahtml篇.docx

《vbahtml篇.docx》由会员分享,可在线阅读,更多相关《vbahtml篇.docx(29页珍藏版)》请在冰豆网上搜索。

vbahtml篇.docx

vbahtml篇

VBA的WEB应用系列教程——HTML文档篇

ByXmyjk

上节课,我们说了HTTP通讯,HTTP通讯一般情况返回的是啥呢?

是页面的源代码。

例如,我们访问XX,返回了,“

doctypehtml>…”一大堆东西。

就是,我们在页面点击右键,“查看页面源文件”,如图:

我们的浏览器,正是把这堆源代码,翻译成我们可视的生动地页面的。

就像VBA一样,这堆代码是什么语言呢,就是通常所说的,超文本标记语言。

为啥叫标记语言,因为它只能用于展示,展示我们所看到的网页页面。

不是编程语言哦。

为啥叫超文本呢,大家仔细看,这堆源代码有什么特征呢,就是有很多<…>这样的文本,一般而言,我们把<…>叫做标签,细心的同学可以发现,标签都是成对出现的,例如“XX一下,你就知道”。

第一个叫做开始标签,第二个多带了个/叫结束标签。

标签之间就是网页的文本,例如这个例子,就是我们网页标题的文本“XX一下,你就知道”。

所以,标签的作用就是,给文本打上标记,告诉浏览器,怎么显示这个文本。

例如本例,要求浏览器把“XX一下,你就知道”显示成网页的标题。

HTML文档=文本+标签,所以就超文本啦。

总之,HTML就是用来描述网页的语言,像上面所说的这样的标签,是有一整套的,呵呵。</p><p>我们的教程,并不是为了教大家,怎么去做网页,设计网页,因此,大家仅仅需要,大致的了解一些HTML系列的文本标记语言的基础即可,知道常用的几个标签,有什么用即可。</p><p>一、网页数据提取常见的HTML标签/元素</p><p>上面说了,标签是用来描述网页的。</p><p>浏览器读取HTML文档,识别标签,并按标签要求以网页进行显示文本。</p><p>大部分标签都是成队出现的。</p><p>起始标签和结束标签之间的所有文本,都叫做元素。</p><p>也就是这个格式就是:</p><p><起始标签:</p><p>也叫元素名>元素的内容<结束标签:</p><p>/+元素名></p><p>标签是可以拥有属性的,因此起始标签,有时候格式如下:</p><p><元素名属性名称=”属性值”></p><p>属性提供了元素的一些附加信息啦,后面我们讲具体标签,大家就会见到属性怎么用。</p><p>另外,注意,元素是可以拥有元素的,即某个元素的内容有时候是一个子元素。</p><p>元素这东西,比较抽象,我们可以把它且当作一个对象来理解,例如工作簿对象,每个工作簿的名称都不一样(属性),每个工作簿里面都有工作表(子元素),每个表都有名称(属性),里面填写的内容也不一样(元素的内容)。</p><p>下面讲讲常见的和我们网页数据提取要常见的元素/标签。</p><p>(一)整体框架结构:</p><p>每个网页文档,都是有个大致的框架,框架如下:</p><p>把上面这段文本保存在TXT文件里面,然后另存.html格式,就可以得到最基础的页面。</p><p><html></p><p><head><!</p><p>--注释:</p><p>文档头部,文档相关消息,并不提供文档内容--></p><p><title></p><p>网页标题</p><p>

--注释:

文档主体-->

网页文档主体

 

从上面的框架代码,我们可以看出,一般的页面,都有html元素,其一般内含两个元素,一个是head元素,一个是body元素。

Head元素仅仅说明文档的相关消息,并不展示文档实体,body元素才是真正展示文档主体的,所有要在页面展示的元素,都要在body內进行书写。

后面的元素的测试,都是以替换掉body元素内的文本“网页文档主体”进行书写,后续不再复述这个框架。

(二)段落

特别是提取小说,新闻等页面的消息,文本都是一段一段的,这样的页面,一般是通过

标签实现的。

这个没啥好说的,自己动手试看看就知道。

所以,当运用ie/webbrowser方式提取这类网页的时候,历遍段落p元素即可。

(三)超链接

超链接是我们最常见的页面元素,基本的门户网站都有他,点了以后,可以跳转到另一个页面。

一般语法格式:

显示的超链接文本

Target属性,表示的是,当我们点击超链接,是在原页面进行跳转(_self)还是新建页面进行跳转(_blank)。

测试做个ET的超链接吧。

(四)图像

图像标签用法和超链接类似,语法:

alt属性代表的是,当图片无法加载的时候,替换显示的文本。

我们做个加载ET的LOGO的页面玩玩!

(五)表格

表格是我们网页最常见的,也是我们网页数据提取,最需要打交道的,其实它非常简单,框架如下,每行用

,每个单元格用元素集合(table元素里面可以直接使用)

All

对象集合,提供对文档中所有HTML元素的访问。

VBA支持直接调用对象的元素,调用就非常方便了,可以用序号调用,例如forms(0),也可以按名称/ID调用,例如forms(“名称/ID”)。

其他没法直接调用对象的元素,可以间接从通用all对象集合中去调用该元素或该元素对应的dom对象,或者还可以从文档树模型去调用。

如下阐述。

3、文档树

在HTMLDOM中,文档的每一部分都是节点,整个文档被定义为一个文档节点,每个标签是一个元素节点,包含在元素中的文本是文本节点,每一个元素的属性是一个属性节点。

形象的比喻做一棵树吧,根节点就是html,主干就是body等,枝干就是body内含的各种元素节点,叶子和花就是元素节点关联的元素的属性(属性节点)或内含文本(文本节点)。

自己画的图太丑了,直接引用w3school的图吧:

当HTMLDOM在解析网页文档的时候,就按整个文档的结构生成一棵树,全部保存在内存中,我们可以随时访问任何节点。

总之,网页文档,可以说是由元素组合而成的,也可以说是由节点连接而成的树构造的。

节点是文档树结构中特有的名词,元素是节点,但是节点不一定是元素,节点还有文档节点、文本节点、属性节点等;元素是元素节点的扩展,元素可以拥有属性还有文本。

初学者不是很必要纠结元素和节点的区别,这个需要甚至数据结构、类和继承等知识。

可大致理解为,同一个htmldom对象,提供的两个不同接口。

有兴趣的朋友,可以按F8运行下面这个程序,然后本地窗口观察bd这个dody对象,你会发现,他既有支持node(节点)的相关属性和方法,也提供了element(元素)的相关属性和方法。

4、如何通过文档树查找所需的网页元素

打个比方吧,当我们要掏大树上的鸟窝,有几种方式呢?

(1)首先,当我们可以目测到,鸟窝在哪个节点的时候,我们可以用梯子,爬上去,直接掏。

因此,当我们可以很清晰的观测到,节点的某些属性时,就可以直接定位它。

元素节点的主要的定位属性有:

id、name和索引号。

还记得吗,元素起始标签的语法:

<标签id="xx"name="xx"value=”xx”...>,当初一定很疑惑吧,为啥要有名字或id等属性,现在明白了吧,和我们的姓名和学号一样,为了比较容易的找到我们。

那索引号是什么呢,就例如我们从树根出发,清点树上的果子,给每个果子编号,这样我们就很容易知道,哪个号的果子成熟了,或者被虫子咬了。

一样的,我们可以按源代码书写的顺序,给每类的元素的成员进行编号(类似每类元素,形成一个数组,从0开始编号)。

通过元素类别和编号,我们可以很容易的找到它。

另外,例如我们中学的老师,上课时,要抓人提问,可以用学号,也可以通过小组,哪一排,第几个学生,起来提问。

因此,索引号,也有整个文档的,和同类元素之分。

殊途同归,无论你点这个学员的学号,还是从他的组别的座位号去找他,都是可以的。

所以,按统计方式或者起始节点的不同,索引号也会不同。

刚刚说的查找工具(也就是打比方里面的梯子)有以下这些:

getElementById(“元素的id属性”)或all(“元素的id属性”):

返回拥有指定id的元素集合

getElementsByName(“元素的name属性”)或all(“元素的name属性”):

返回拥有指定名称的元素的集合

getElementsByTagName(“标签名称”)或all.tags(“标签名称”):

返回该类标签的元素集合。

all(索引号):

返回指定索引号的元素节点。

(2)其次,当我们仅听到鸟鸣声,却不知道鸟窝在哪里的时候,有时候,我们只能顺藤摸瓜,开始爬树,沿着树干进行判断,最后攀爬到鸟窝处。

或者,可能大概知道个方位,先架梯子,到某个主干,再从那里开始查找。

因此,当我们找不到清晰的属性去定位网页元素时,我们可以从body元素/节点开始,一级级去寻找,也可以先定位到它的毗邻节点/元素,再通过判断,去查找它的精确位置。

从节点方面而言,树形的模型的节点有个特征,除了根节点,每个节点均只有一个父节点(parentNode),有一个或者多个子节点(childNodes,类似一个对象集合或对象数组,从0开始编号)。

因此,通过节点的亲属关系,进行判断查找,我们就可以一步步的在父子节点中切换,获取所需的元素。

节点有一些属性,可以利于我们的查找判断,如下:

nodeName(节点名称):

元素节点的名称为其标签名,属性节点的名称为其属性名称;

nodeValue(节点值):

文本节点的值为其包含的文本,属性节点的值为其包含的属性值;

nodeType(节点类型):

元素节点为1、属性节点为2、文本节点为3、注释节点为8、文档节点为9

另外,从元素方面而言,要定位元素的父元素可以通过parentElement属性,定位元素的子元素集合可以通过children属性,判断其标签的名称(tagname),他的值(value),内含文本(innertext)等方式来进行查找。

最后,定位节点/元素的下一个同级兄弟可以通过nextSibling属性,定位上一个同级兄弟可以用previousSibling属性。

示例的话,后面一起展示。

先学懂方法吧。

5、网页元素分析工具

工欲善其事,必先利其器,很多高手已经提供给我们很多好用的网页元素的分析工具,我们怎么用他们呢?

讲两个工具,一个是网页精灵(按键精灵论坛的作品),一个是firebug。

首先是网页按键精灵。

如附件,操作如下图,输入网址,按“网页分析”,然后按F9,将鼠标指向需要分析的页面元素,例如文本框,则得出元素相关的属性。

下方得出的有,标签的名称,元素的id,元素的name,元素的索引号(第几个input标签,从0开始编号)。

复习下上面说的概念?

就想象网页文档是个班级,标签就是学习小组,其中input这个学习小组里面,有个人的名字name是wd,他的工号id是kw,它在小组里面座位号是0。

我们,就是用这些标示,来找到这个元素的。

另外,在firefox浏览器,还可以使用firebug,直接对页面元素单击右键,使用“使用firebug查看元素”的菜单。

这样可以直接观察到该元素的网页源代码,然后进行分析。

6、常见HTMLDOM对象的属性、方法以及示例

(1)通用的属性和方法

i.四个常用的通用属性

对象.innerHtml:

对象内部的HTML代码

对象.OuterHtml:

对象的HTML代码,包括对象本身的HTML标签

对象.innerText:

对象内部的文本

对象.OuterText:

对象的文本,包括对象本身的文本

举例,我们去捕捉XX首页,那个提交搜索的表单。

这个表单的名称是”f”,然后查询它的innerHtml和OuterHtml。

观察一下立即窗口输出的区别,很容易就知道inner和outer的区别了。

ii.一个常用的通用方法fireevent(发送事件)

HTMLDOM对象,和我们EXCEL对象,都具有属性、方法和事件。

前面所述的innerhtml那些都是属性,方法就是我们要给这个对象执行什么动作,比如点击网页上一个按钮,按钮这个对象就被“click”了,click就是按钮对象的一个方法。

另外,网页对象也像我们的工作表一样,也支持识别事件,例如,当按钮被点击了,系统就会触发“oncilck”(被点击了这个事件),然后依据网页源代码里面设定好处理步骤去处理这个事件。

主要的事件,整理如下:

事件

适用元素

何时触发

onload

Body和frame

文档加载时

onchange

表单元素

当元素改变时

onsubmit

表单元素

当表单被提交时

onreset

表单元素

当表单被重置时

onselect

表单元素

当元素被选取时

onblur

表单元素和超链接元素

当元素失去焦点时

onfocus

表单元素和超链接元素

当元素获得焦点时

onkeydown

Body和表单元素

当键盘被按下时

onkeypress

Body和表单元素

当键盘被按下后又松开时

onkeyup

Body和表单元素

当键盘被松开时

onclick

大部分元素

当鼠标被单击时

ondblclick

大部分元素

当鼠标被双击时

onmousedown

大部分元素

当鼠标按钮被按下时

onmousemove

大部分元素

当鼠标指针移动时

onmouseout

大部分元素

当鼠标指针移出某元素时

onmouseover

大部分元素

当鼠标指针悬停于某元素之上时

onmouseup

大部分元素

当鼠标按钮被松开时

那fireevent这个方法又是何用呢,他的作用就是,代替我们的一些操作,直接激发某些对象的某些事件。

例如我们附件的fireevent示例.html,点击文档主体的”点我一下”,将弹出对话框。

下面,我们用程序模拟,这个点击事件的触发。

新建一个excel,放置于和fireevent示例.html同文件夹下的目录里。

 

这样,程序就模拟了我们点击了body后激发的事件。

一样,我们也可以用dmt.body.Click,这个方法取激发事件,殊途同归。

Fireevent主要用于,有的表单的校验机制非常强,需要光标聚焦了,文本change了等等,才能提交表单,这些事件的模拟只能靠fireevent了,其他方法就很难替代了。

(2)表单和表单控件对象

表单form对象,有一个方法比较重要,就是submit,这个方法提供了表单的提交的动作。

如果我们捕捉页面的提交按钮非常困难时,有时候只要对表单,执行submit方法,表单也是可以提交的,不需去点击提交按钮。

表单控件,文本输入类控件,最常用就是value的属性了,通过这个属性,可以往文本框里面添加文本。

单选框、复选框,常用的就是checked属性了,如果为true就是被选中了,或者直接使用click方法也行。

下拉列表呢,可以通过select对象的selectedIndex属性去设置选中项,也可以通过其内含对象集合options(),设置某个options(x)的selected属性为true,来设置选中项。

还是以XX首页为示例,我们用程序模拟键入查询数据“exceltip”,然后提交查询为演示吧。

 

(3)Table对象

表格对象,也是我们提取网页数据,最常打交道的对象了。

其内含rows对象集合,可以使我们访问表格内的每行,每个row对象还内含cells对象集合,使我们可以访问其每行的每个单元格,读取每个单元格的innertext属性即可获取我们所需每个单元格的文本。

另外,常用的属性还有length,这个类似我们VBA里面的count,都是返回某个对象的数量。

我们以提取东方财富网的限售股解禁清单的table为例,URL:

通过上面的代码,这个解禁清单就被我们提取下来了。

 

(4)框架frames对象

Frame和iframe元素,均体现在frames对象集合里面。

其最重要的属性就是document,也就是获取框架内的页面文档。

举个例子吧,提取一个网址为:

(5)Anchor对象

文档中标签每出现一次,就会创建Anchor对象。

这个就没啥好示例的了,href属性返回被链接的URL,click可以模拟超链接被点击了。

(6)元素查找模板

实在不懂得用网页元素分析工具的,那VBA里面,怎么实现,查找我们所需要的元素呢?

以上面第三点,

查找出来的索引号为3,和我们使用工具查找

相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1

 

(六)列表

很多时候,数据也经常以列表形式存在的,列表有三种:

无序、有序和自定义。

分别框架如下:

1、无序列表

    2、有序列表

      3、自定义列表

      (七)表单和表单控件

      除了表格,表单也是我们在网页数据提取,页面操控最常见到的元素。

      例如我们注册用户,例如我们的微博登陆,例如我们的XX搜索,其实都是表单。

      我们先来看一个例子:

      例如在文本框输入“苹果”后,按提交按钮:

      这个表单模拟的是XX搜索,在文本框输入关键字后,按提交,将跳转至XX的搜索结果的界面。

      呵呵,奇妙吧。

      如何实现的呢?

      细心的同学会发现吧,表单form这个元素,有“method”和“action”两个属性,action属性指定的就是,提交表单后,向这个属性指定URL发送http请求(呵呵,涉及到第一节课的知识啦),method这个属性设定的就是,要按照get或者post等方式发送http请求。

      复习下第一节课吧,采用get的方式呢,参数将在URL后面加个?

      号,然后发送,采用post的方式呢,将在消息主体里面投递查询参数。

      那发送http请求的参数从哪里来的?

      就是从表单元素内含的各种下属元素,提取其name属性的值,作为参数名,然后提取该元素的value属性作为参数值(value属性的值有时候是由我们输入的,例如本例,虽然我们指定了默认的value属性的值为exceltip,但是我们可以手动输入,把它修改成“苹果”)。

      然后浏览器就用参数名=参数值和&进行连接(还是上节课的知识)串起来。

      就如本例,提交后,观察URL为:

      下面,我们讲讲表单主要的内含子元素吧。

      1、输入标签(

      其语法是:

      其类型由type属性定义,常见的有:

      text(文本框)、Radio(单选按钮)、Checkboxes(复选框)、submit(提交按钮)、hidden(隐藏)、reset(重置)和password(密码框)等。

      其中注意,其中单选框和复选框的是否选中,由checked属性指定,如果值是”checked”则选定。

      不多说了,看例子吧。

      (文本框和提交按钮就不做了,上面都举例了。

      密码框同,类似的)

      注意,当表单提交的时候,发送http请求时,单选框和复选框,仅发送checked属性为”checked”的元素。

      一样是把标记了checked的元素的name属性值和value属性值串起来。

      2、下拉列表

元素集合(table元素里面可以直接使用)

Rows

代表