设为首页收藏本站|繁體中文

Excel 技巧网

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

查看: 58411|回复: 83

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

  [复制链接]
发表于 2012-8-26 23:58:16 | 显示全部楼层 |阅读模式
  • 署名作者: xmyjk
  • 版权声明: 版权归本站与作者共有 除本站官方外非作者本人转载须经许可并注明出处
  • 本文来自:
  • 引用作品:
  • 适用版本: 2010 2007 2003以前版本 
  • 语言环境: 简体中文
  • 学习方法: 掌握Excel技巧的关键是动手操作 | 下载 ≠ 知识


  • 免费注册成为本站会员,享用更多功能,结识更多Office办公高手!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 xmyjk 于 2012-9-4 16:40 编辑

    第一节课以及整个教程体系,请见:
    VBA的WEB应用系列教程——HTTP通讯基础篇
    http://www.exceltip.net/thread-37639-1-1.html



    这一篇没想到整理完了有8600多字,想学习的就请耐心看吧,示例比较多。整个WORD文档如下:
    html篇1.rar (0 Bytes, 下载次数: 2128)

    评分

    参与人数 13技术分 +2 魅力值 +71 收起 理由
    jiashangxian + 5 感谢帮助:)
    keven + 5 技术创新:)
    21hdw + 5 感谢帮助:)
    bishunbiao + 5 技法娴熟:)
    水星钓鱼 + 6 好文

    查看全部评分

     楼主| 发表于 2012-8-27 00:01:14 | 显示全部楼层
    本帖最后由 xmyjk 于 2012-8-29 21:32 编辑

    补充案例.zip (104.66 KB, 下载次数: 484)
    回复 支持 1 反对 0

    使用道具 举报

     楼主| 发表于 2012-8-26 23:58:36 | 显示全部楼层
    本帖最后由 xmyjk 于 2012-8-27 00:40 编辑

    (二)段落<p>
          特别是提取小说,新闻等页面的消息,文本都是一段一段的,这样的页面,一般是通过<p>标签实现的。这个没啥好说的,自己动手试看看就知道。

    5.png
          所以,当运用ie/webbrowser方式提取这类网页的时候,历遍段落p元素即可。
    (三)超链接<a>
          超链接是我们最常见的页面元素,基本的门户网站都有他,点了以后,可以跳转到另一个页面。一般语法格式:
    1. <a href=”跳转的URL” target=” _blank/_self”>显示的超链接文本</a>
    复制代码
    Target属性,表示的是,当我们点击超链接,是在原页面进行跳转(_self)还是新建页面进行跳转(_blank)。
          
          测试做个ET的超链接吧。

    6.png
    (四)图像<img>
          图像标签用法和超链接类似,语法:
    1. <img src=”url” alt=”文本”>
    复制代码
    alt属性代表的是,当图片无法加载的时候,替换显示的文本。

          我们做个加载ET的LOGO的页面玩玩。(http://www.exceltip.net/static/image/common/logo.jpg)。

    7.png
    (五)表格<table>
          表格是我们网页最常见的,也是我们网页数据提取,最需要打交道的,其实它非常简单,框架如下,每行用<tr>,每个单元格用<td>:
    1. <table border="1"> <!--注释:border设置表格边框样式-->
    2.         <tr>
    3.                 <td>第一行第一个单元格</td>
    4.                 <td>第一行第二个单元格</td>
    5.         </tr>
    6.         <tr>
    7.                 <td>第二行第一个单元格</td>
    8.                 <td>第二行第二个单元格</td>
    9.         </tr>
    10. </table>
    复制代码
    8.png
    (六)列表
          很多时候,数据也经常以列表形式存在的,列表有三种:无序、有序和自定义。分别框架如下:

          1、无序列表<ul>
    1. <ul>
    2. <li>函数</li>
    3. <li>VBA</li>
    4. </ul>
    复制代码
    9.png
    2、有序列表<ol>
    1. <ol>
    2. <li>图书
    3.    <ol>
    4.        <li>VBA</li>
    5.        <li>函数</li>
    6.            </ol>
    7.         </li>
    8. <li>视频
    9.    <ol>
    10.        <li>基操</li>
    11.        <li>图表</li>
    12. <li>数透</li>
    13.            </ol>
    14.         </li>
    15. </ol>
    复制代码
    10.png
    3、自定义列表<dl>
    1. <dl>
    2. <dt>第一节课</dt>
    3. <dd>网络通讯</dd>
    4. <dt>第二节课</dt>
    5. <dd>HTML</dd>
    6. </dl>
    复制代码
    11.png



    评分

    参与人数 2魅力值 +25 收起 理由
    keven + 5 技术创新:)
    kevinchengcw + 20 小杨辛苦了,继续加油!

    查看全部评分

    回复 支持 1 反对 0

    使用道具 举报

     楼主| 发表于 2012-8-26 23:58:55 | 显示全部楼层
    本帖最后由 xmyjk 于 2012-8-27 00:54 编辑

    (七)表单和表单控件

          除了表格,表单也是我们在网页数据提取,页面操控最常见到的元素。例如我们注册用户,例如我们的微博登陆,例如我们的百度搜索,其实都是表单。我们先来看一个例子:
    1. <p>请在文本框输入要搜索的关键字,后按提交,将提交百度进行搜索</p>
    2. <form method="get" action="http://www.baidu.com/s">
    3.     <input name="wd" type="text" value="exceltip">
    4.     <input type="submit" value="提交">
    5. </form>
    复制代码
    12.png
    例如在文本框输入“苹果”后,按提交按钮:
    13.png
           这个表单模拟的是百度搜索,在文本框输入关键字后,按提交,将跳转至百度的搜索结果的界面。呵呵,奇妙吧。如何实现的呢?

           细心的同学会发现吧,表单form这个元素,有“method”和“action”两个属性,action属性指定的就是,提交表单后,向这个属性指定URL发送http请求(呵呵,涉及到第一节课的知识啦),method这个属性设定的就是,要按照get或者post等方式发送http请求。复习下第一节课吧,采用get的方式呢,参数将在URL后面加个?号,然后发送,采用post的方式呢,将在消息主体里面投递查询参数。

           那发送http请求的参数从哪里来的?就是从表单元素内含的各种下属元素,提取其name属性的值,作为参数名,然后提取该元素的value属性作为参数值(value属性的值有时候是由我们输入的,例如本例,虽然我们指定了默认的value属性的值为exceltip,但是我们可以手动输入,把它修改成“苹果”)。然后浏览器就用参数名=参数值和&进行连接(还是上节课的知识)串起来。就如本例,提交后,观察URL为:http://www.baidu.com/s?wd=苹果,wb就是第一个input元素的属性值,苹果就是我们输入的,赋予第一个input元素的value属性的值。

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

          1、输入标签(<input>)
          其语法是:
    1. <input type=类型 name=元素名称 id=元素id value=元素值/>
    复制代码
    其类型由type属性定义,常见的有:text(文本框)、Radio(单选按钮)、Checkboxes(复选框)、submit(提交按钮)、hidden(隐藏)、reset(重置)和password(密码框)等。其中注意,其中单选框和复选框的是否选中,由checked属性指定,如果值是”checked”则选定。不多说了,看例子吧。(文本框和提交按钮就不做了,上面都举例了。密码框同,类似的)
    1. <form>
    2. <input name="ch1" type="checkbox" value="excel" checked="checked">表格设计
    3. <input name="ch2" type="checkbox" value="word">文档处理
    4. <input name="ch3" type="checkbox" value="ppt" checked="checked">幻灯片
    5. </br>
    6. <input name="rd" type="radio" value="100" checked="checked">vip
    7. <input name="rd" type="radio" value="10">普通会员
    8. </br>
    9. <input type="reset" value="重置">
    10. </form>
    复制代码
    14.png
          注意,当表单提交的时候,发送http请求时,单选框和复选框,仅发送checked属性为”checked”的元素。一样是把标记了checked的元素的name属性值和value属性值串起来。

    2、下拉列表<select>
          其语法:
    1. <select multiple="multiple" name=名称 size=显示菜单条目数>
    复制代码
    如果存在multiple="multiple"的属性设定,则允许菜单多选,否则单选。Size是设置可见的菜单条目数。其下级元素,option代表的是其每个菜单项目,语法为:
    1. <option value=值 selected="selected">显示文字</option>
    复制代码
    一样,value属性接着的就是发往服务器的值,当提交的时候,就是将select的name属性值与用户选择的某项option元素的value属性值连接,进行发送。Option元素的selected属性设置的是默认选中的菜单项。示例如下:
    1.            <p>单选选择列表</p>
    2.            <form>
    3.                <select name="sel">
    4.                    <option value="1">图书</option>
    5.                    <option value="2">视频</option>
    6.                    <option value="3" selected="selected">动画</option>
    7.                    <option value="4">图解</option>
    8.                </select>
    9.            </form>
    10.            <p>多重选择列表,按住shift或ctrl键进行多重选择</p>
    11.            <form>
    12.                <select multiple="multiple" name="sel" size=2>
    13.                    <option>excel</option>
    14.                    <option>word</option>
    15.                    <option>ppt</option>
    16.                </select>
    17.            </form>
    复制代码
    15.png
    (八)框架<frame> 标签和<iframe> 标签

    1、frameset和frame
          Frame是独立框架,就好像我们的分屏浏览一样,一个屏幕,浏览多个画面一样。语法如下:
    1. <html>
    2. <frameset cols="a%,b%,…"/ rows =”*,100”>
    3.       <frame src="页面A" />
    4.       <frame src="页面 B" />
    5. </frameset>
    6. </html>
    复制代码
    首先框架必须放置在框架结构标签里面(<frameset>),其rows/columns 属性的值规定了框架每行或每列占据屏幕的面积。另外,frameset和body不能同时使用,除非有noframes,很简单,因为frame其实就描绘文档了,所以,一般不需要再有body进行描绘。另外,框架元素一般放置于head元素內。

          Frame元素的src属性就是设定了其框架内显示页面的URL。示例如下:
    1. <html> <!--注释:文档跟元素-->
    2.     <head> <!--注释:文档头部,文档相关消息,并不提供文档内容-->
    3.                 <title>
    4.                     框架测试文档
    5.                 </title>
    6.         <frameset rows="50%,50%">
    7.                <frame src="http://www.exceltip.net">
    8.                <frame src="http://www.baidu.com">
    9.         </frameset>
    10.         </head>
    11. </html>
    复制代码

    16.png
    2、iframe

          Iframe的框架,就类似画中画的效果,在原页面插入一个页面。语法如下:
    1. <iframe src =url scrolling=yes/no/auto height=xx width=xx>
    复制代码
    Src设定框架内要显示的文档的url,scrolling设置是否显示滚动条。Height和widty设置的就是它的高度和宽度。案例如下:
    1. <p>第一个框架</p>
    2. <iframe src="http://www.w3school.com.cn"></iframe>     
    3.          </br>
    4.          <p>第二个框架</p>
    5.          <iframe src="http://www.baidu.com"></iframe>
    复制代码

    17.png
          Html就大概讲这一些吧,呵呵,毕竟我们不是要做网页,大家大致了解下就是,还可以参考www.w3school.com.cn去学习。一般能做到,看得懂网页的框架结构即可。
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2012-8-26 23:59:26 | 显示全部楼层
    本帖最后由 xmyjk 于 2012-8-27 01:05 编辑

    二、HTML 文档对象模型(HTML DOM)

          认识了网页文档上面的各种元素,我们怎么访问他们呢,是通过什么机制实现的呢?

          HTML文档,向程序们,提供了访问其元素的端口,这就是HTML DOM,其定义了一套标准的针对 HTML 文档的对象访问或操作的机制。现在DOM有多个版本,本文还是以最基础的DOM 1(98年颁布)这个版本。

          1、VBA访问IE网页文档的程序模板

          讲访问前,我们先简要讲讲,如何用VBA调用IE,直接给个模板吧,详细的IE对象的属性和方法等,我们后面的课会再讲:
    1. Sub test()
    2. Dim ie, dmt
    3.     Set ie = CreateObject("InternetExplorer.Application") '创建一个IE对象
    4.     With ie
    5.         .Visible = True '显示它
    6.         .navigate "http://www.baidu.com" '加载某个页面
    7.         Do Until .ReadyState = 4 '等待页面加载完毕
    8.             DoEvents
    9.         Loop
    10.         Set dmt = .document '将IE浏览器加载的页面文档,赋予dmt变量
    11.         ‘开始操纵页面,或者提取数据啦
    12.     End With
    13. End Sub
    复制代码
    通过上面这个模板,我们就可以创建一个IE对象,并将其页面文档对象赋予dmt变量,这样,我们通过dmt变量,就可对页面元素,进行后续的访问以及操作。

    2、HTML DOM 对象
          和我们EXCEL的对象集合的层次结构类似(WORKBOOKS-WORKSHEETS-CELLS等),HTML DOM为网页文档也组织了一个对象集合的分层次模型。另外,从上一节标签和元素的学习,大家也可以大致的得知,元素是可以拥有元素的,所以,这个分层的模型完全是合理的。HTML DOM的对象模型类似如下图:

    18.png
          但是,VBA直接支持调用的对象有限,如下:
    19.png
          VBA支持直接调用对象的元素,调用就非常方便了,可以用序号调用,例如forms(0),也可以按名称/ID调用,例如forms(“名称/ID”)。

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

    3、文档树
          在HTML DOM中,文档的每一部分都是节点,整个文档被定义为一个文档节点,每个标签是一个元素节点,包含在元素中的文本是文本节点,每一个元素的属性是一个属性节点。
      
          形象的比喻做一棵树吧,根节点就是html,主干就是body等,枝干就是body内含的各种元素节点,叶子和花就是元素节点关联的元素的属性(属性节点)或内含文本(文本节点)。自己画的图太丑了,直接引用w3school的图吧:

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

            总之,网页文档,可以说是由元素组合而成的,也可以说是由节点连接而成的树构造的。节点是文档树结构中特有的名词,元素是节点,但是节点不一定是元素,节点还有文档节点、文本节点、属性节点等;元素是元素节点的扩展,元素可以拥有属性还有文本。初学者不是很必要纠结元素和节点的区别,这个需要甚至数据结构、类和继承等知识。可大致理解为,同一个html dom对象,提供的两个不同接口。有兴趣的朋友,可以按F8运行下面这个程序,然后本地窗口观察bd这个dody对象,你会发现,他既有支持node(节点)的相关属性和方法,也提供了element(元素)的相关属性和方法。

    21.png
    1. Sub test()
    2. Dim ie, dmt, bd
    3.     Set ie = CreateObject("InternetExplorer.Application") '创建一个IE对象
    4.     With ie
    5.         .Visible = True '显示它
    6.         .navigate "http://www.baidu.com" '加载某个页面
    7.         Do Until .ReadyState = 4 '等待页面加载完毕
    8.             DoEvents
    9.         Loop
    10.         Set dmt = .document '将IE浏览器加载的页面文档,赋予dmt变量
    11.         Set bd = dmt.body '将文档的body赋予bd变量
    12.     End With
    13. End Sub
    复制代码
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2012-8-26 23:59:46 | 显示全部楼层
    本帖最后由 xmyjk 于 2012-8-27 01:55 编辑

    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。

          首先是网页按键精灵。如附件 wqm.zip (1.52 MB, 下载次数: 534)
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2012-8-27 00:00:02 | 显示全部楼层
    本帖最后由 xmyjk 于 2012-8-27 01:20 编辑

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

    (1)通用的属性和方法
          
          i.四个常用的通用属性:

          对象.innerHtml:对象内部的HTML代码

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

          对象.innerText:对象内部的文本

          对象.OuterText:对象的文本,包括对象本身的文本

          举例,我们去捕捉百度首页,那个提交搜索的表单。这个表单的名称是”f”,然后查询它的innerHtml和OuterHtml。
    1. Sub test()
    2.     Dim ie, dmt, an
    3.     Set ie = CreateObject("InternetExplorer.Application")    '创建一个IE对象
    4.     With ie
    5.         .Visible = True    '显示它
    6.         .navigate "http://www.baidu.com"    '加载某个页面
    7.         Do Until .ReadyState = 4    '等待页面加载完毕
    8.             DoEvents
    9.         Loop
    10.         Set dmt = .document    '将IE浏览器加载的页面文档,赋予dmt变量
    11.         Set an = dmt.forms("f")
    12.         Debug.Print "innerHtml:", an.innerhtml
    13.         Debug.Print "OuterHtml:", an.OuterHtml
    14.     End With
    15. End Sub
    复制代码
    观察一下立即窗口输出的区别,很容易就知道inner和outer的区别了。

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

          HTML DOM 对象,和我们EXCEL对象,都具有属性、方法和事件。前面所述的innerhtml那些都是属性,方法就是我们要给这个对象执行什么动作,比如点击网页上一个按钮,按钮这个对象就被“click”了,click就是按钮对象的一个方法。另外,网页对象也像我们的工作表一样,也支持识别事件,例如,当按钮被点击了,系统就会触发“oncilck”(被点击了这个事件),然后依据网页源代码里面设定好处理步骤去处理这个事件。

          主要的事件,整理如下:

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

          例如我们附件的fireevent示例.html,点击文档主体的”点我一下”,将弹出对话框。下面,我们用程序模拟,这个点击事件的触发。新建一个excel,放置于和fireevent示例.html同文件夹下的目录里。

    25.png
    1. Sub test()
    2.     Dim ie, dmt, fm
    3.     Set ie = CreateObject("InternetExplorer.Application")    '创建一个IE对象
    4.     With ie
    5.         .Visible = True    '显示它
    6.         .navigate ThisWorkbook.Path & " \fireevent示例.html"    '加载某个页面
    7.         Do Until .ReadyState = 4    '等待页面加载完毕
    8.             DoEvents
    9.         Loop
    10.         Set dmt = .document    '将IE浏览器加载的页面文档,赋予dmt变量
    11.         dmt.body.FireEvent "onclick" '触发body的点击事件
    12.     End With
    13. End Sub
    复制代码
    这样,程序就模拟了我们点击了body后激发的事件。一样,我们也可以用dmt.body.Click,这个方法取激发事件,殊途同归。

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

    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2012-8-27 00:00:24 | 显示全部楼层
    本帖最后由 xmyjk 于 2012-8-29 09:55 编辑

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

          表单form对象,有一个方法比较重要,就是submit,这个方法提供了表单的提交的动作。如果我们捕捉页面的提交按钮非常困难,有时候只要对表单,执行submit方法,表单也是可以提交的,不需去点击提交按钮。

          表单控件,文本输入类控件,最常用就是value的属性了,通过这个属性,可以往文本框里面添加文本。
          
          单选框、复选框,常用的就是checked属性了,如果为true就是被选中了,或者直接使用click方法也行。
          
          下拉列表呢,如果是单选列表框,可通过selectedIndex属性去设置选中项(下拉选项,从1开始编号,如2就是选择下拉列表的第二个选项),也可以通过value属性,直接把value指定为要选定的option的value即可,但多选列表框不可用这两个属性。另外,所有类别的列表框,都可以通过其内含对象集合options(),设置某个options(x)的selected属性为true,来设置选中项。

          还是以百度首页为示例,我们用程序模拟键入查询数据“exceltip”,然后提交查询为演示吧。
    1. Sub test()
    2.     Dim ie, dmt, fm
    3.     Set ie = CreateObject("InternetExplorer.Application")    '创建一个IE对象
    4.     With ie
    5.         .Visible = True    '显示它
    6.         .navigate "http://www.baidu.com"    '加载某个页面
    7.         Do Until .ReadyState = 4    '等待页面加载完毕
    8.             DoEvents
    9.         Loop
    10.         Set dmt = .document    '将IE浏览器加载的页面文档,赋予dmt变量
    11.         Set fm = dmt.forms("f") '用表单的名称f,捕捉表单对象
    12.         dmt.all("kw").Value = "exceltip" '用搜索栏的id”kw”捕捉它,并键入exceltip
    13.         dmt.all.tags("input")(3).Click '用“百度一下”按钮的索引号捕捉它,并模拟按钮的点击
    14.         'fm.submit '模拟表单的提交,不一定要click
    15.     End With
    16. End Sub
    复制代码
    (3)Table 对象

          表格对象,也是我们提取网页数据,最常打交道的对象了。其内含rows对象集合,可以使我们访问表格内的每行,每个row对象还内含cells对象集合,使我们可以访问其每行的每个单元格,读取每个单元格的innertext属性即可获取我们所需每个单元格的文本。

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

          我们以提取东方财富网的限售股解禁清单的table为例,URL:http://data.eastmoney.com/dxf/default.html。
    1. Sub test()
    2.     Dim ie, dmt, tb, i&, j&
    3.     Set ie = CreateObject("InternetExplorer.Application")    '创建一个IE对象
    4.     With ie
    5.         .Visible = True    '显示它
    6.         .navigate "http://data.eastmoney.com/dxf/default.html"    '加载某个页面
    7.         Do Until .ReadyState = 4    '等待页面加载完毕
    8.             DoEvents
    9.         Loop
    10.         Set dmt = .document    '将IE浏览器加载的页面文档,赋予dmt变量
    11.         Set tb = dmt.all.tags("table")(3) '通过索引号捕捉表格对象
    12.         For i = 0 To tb.Rows.Length - 1 '历遍其每个行
    13.             For j = 0 To tb.Rows(i).Cells.Length - 1 '历遍每行的每个单元格
    14.                 Cells(i + 1, j + 1) = tb.Rows(i).Cells(j).innertext '将其innertext写入单元格
    15.             Next
    16.         Next
    17.     End With
    18. End Sub
    复制代码
    通过上面的代码,这个解禁清单就被我们提取下来了。

    26.png
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2012-8-27 00:00:41 | 显示全部楼层
    本帖最后由 xmyjk 于 2012-8-27 01:37 编辑

    (4)框架frames对象

          Frame和iframe元素,均体现在frames对象集合里面。其最重要的属性就是document,也就是获取框架的页面文档。举个例子吧,提取一个网址为:http://www.w3school.com.cn/tiy/loadtext.asp?f=html_iframe的框架里面的图片的URL。
    27.png
    1. Sub test()
    2.     Dim ie, dmt, idmt
    3.     Set ie = CreateObject("InternetExplorer.Application")    '创建一个IE对象
    4.     With ie
    5.         .Visible = True    '显示它
    6.         .navigate "http://www.w3school.com.cn/tiy/loadtext.asp?f=html_iframe"    '加载某个页面
    7.         Do Until .ReadyState = 4    '等待页面加载完毕
    8.             DoEvents
    9.         Loop
    10.         Set dmt = .document    '将IE浏览器加载的页面文档,赋予dmt变量
    11.         Set idmt = dmt.frames(0).document    '将框架里面的文档赋予idmt变量
    12.         Debug.Print idmt.images(0).src    '读取图片的URL
    13.     End With
    14. End Sub
    复制代码
    (5)Anchor 对象

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

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

    使用道具 举报

     楼主| 发表于 2012-8-27 00:00:57 | 显示全部楼层
    本帖最后由 xmyjk 于 2012-8-29 21:24 编辑

    (6)元素查找模板

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

          以上面第三点,http://data.eastmoney.com/dxf/default.html,为例,查找那个table的索引号。
    1. Sub test()
    2.     Dim ie, dmt, tbs, i&, tb
    3.     Set ie = CreateObject("InternetExplorer.Application")    '创建一个IE对象
    4.     With ie
    5.         .Visible = True    '显示它
    6.         .navigate "http://data.eastmoney.com/dxf/default.html"    '加载某个页面
    7.         Do Until .ReadyState = 4    '等待页面加载完毕
    8.             DoEvents
    9.         Loop
    10.         Set dmt = .document    '将IE浏览器加载的页面文档,赋予dmt变量
    11.         Set tbs = dmt.all.tags("table")    '获取所有的table对象集合
    12.         For i = 0 To tbs.Length - 1    '历遍每个table
    13.             If InStr(tbs(i).innertext, "解除限售日期") > 0 Then    '判断它的内含文本是否有某个关键字
    14.                 Debug.Print i
    15.                 Set tb = tbs(i)    '符合则捕捉这个表
    16.                 'Exit For '是否退出循环视文档架构,如果是表格套表格,很有可能是最后一个才是真正的数据表
    17.             End If
    18.         Next
    19.     End With
    20. End Sub
    复制代码
    查找出来的索引号为3,和我们使用工具查找的一致。
    28.png
          整个查找框架就是类似这样啦,其他元素的查找,也可以模拟这个框架进行改写。


          HTML DOM对象也就大概讲这么多吧,其余文中没提到的对象、属性、方法和事件,请参考如下网址进行学习:http://www.w3school.com.cn/htmldom/htmldom_reference.asp

          这节课就讲这么多吧,首先教会大家,怎么大概看懂HTML格式的网页源代码框架和介绍代码的主要语法规则,简要阐述了浏览器显示原理。进而,介绍了外部程序如何访问HTML文档,HTML DOM提供了哪些对象以及机制供外部访问,介绍了网页元素、文档树和节点的定义。最后,介绍了如何查找我们所需的网页元素,并简单的演示了,在VBA中如何访问和操控这些元素。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    Excel技巧网的会员探讨问题仅代表其个人意见,与网站的立场无关。任何违反国家和地方相关法律法规的言论,本站有义务协助政府相关部门追究发言者的责任!
    本站中非注明转载文章与案例的版权为作者与Excel技巧网共有。若非原文作者,本站之外任何单位或个人未经允许,不得将其用于商业用途。
    若非原文作者,任何形式的非商业性转载必须获得Excel技巧网或作者允许,并注明作者和出处。
    会员发表的帖子如涉及版权纠纷,须自行负责。详情请参考注册时的网站服务条款。
    本站特聘法律顾问:沈学律师

    Archiver|手机版|Excel技巧网 ( 闽ICP备08107682号-2 ) | 闽公网安备 35020302032608号  

    GMT+8, 2018-8-22 03:21

    Powered by Discuz! X3.3

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表