人生,既为过客,何须执着,有些事情,注定无法左右,总要学会放下,懂得随缘。你所追求的,也许最后是一场空,不是你不够努力,是一开始,结局已经注定。。
《VBA信息获取与处理》教程是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,八十四讲。今日的内容是专题八“VBA与HTML文档”:查找百度首页的网页元素
第六节 HTML DOM对象常用的方法
大家好,我们开始HTML DOM常见对象的方法的讲解,所谓的方法就是对象自身的动作。HTML DOM 方法就是我们可以在节点(HTML 元素)上执行的动作,比如添加或修改元素。
1 常用的 HTML DOM 方法
一些常用的 HTML DOM 方法:
getElementById(id) 获取带有指定 id 的节点(元素)
getElementsByTagName() 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。
getElementsByClassName() 返回包含带有指定类名的所有元素的节点列表。
appendChild(node) 插入新的子节点(元素)
removeChild(node) 删除子节点(元素)
insertBefore() 在指定的子节点前面插入新的子节点。
getAttribute() 返回指定的属性值。
HTML DOM 方法还有很多,我们经常利用的就是上述前三个我用红色标记的方法。
2 访问 HTML 元素(节点)
所谓访问HTML 元素(节点)就是上述方法的利用,我们举例说明:
1) getElementById() 方法返回带有指定 ID 的元素:
语法:document.getElementById("id");
如获取 id="intro" 的元素:document.getElementById("intro");
2) getElementsByTagName() 返回带有指定标签名的所有元素。
语法:document.getElementsByTagName("tagname");
如获得所有 <p> 元素的列表:document.getElementsByTagName("p");
3)getElementsByClassName() 查找带有相同类名的所有 HTML 元素。
如获得所有包含 class="intro" 的所有元素的一个列表:document.getElementsByClassName("intro");
注意:getElementsByClassName() 在 Internet Explorer 5,6,7,8 中无效。
3 查找所需的网页元素的综合利用
有了上面的理论讲解,我们看看在实际的应用中如何查找所需要的网页元素:
1)当我们可以很清晰的观测到,节点的某些属性时,就可以直接定位它。元素节点的主要的定位属性有:id、name和索引号。元素起始标签的语法:<标签 id="xx" name="xx" value=”xx”...>,而索引号,是按源代码书写的顺序,给每类的元素的成员进行编号(类似每类元素,形成一个数组,从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属性。
4 VBA中查找百度首页元素的一个实例
我们去捕捉百度首页,那个提交搜索的表单。这个表单的名称是”f”,然后查询它的innerHtml和OuterHtml。
Sub MYNZA() '捕捉百度首页,提交搜索的表单
【代码见教程】
End Sub
代码截图:
输出结果:
innerHtml:
<input name="ie" type="hidden" value="utf-8"><input name="f" type="hidden" value="8"><input name="rsv_bp" type="hidden" value="1"><input name="rsv_idx" type="hidden" value="1"><input name="ch" type="hidden" value=""><input name="tn" type="hidden" value="baidu"><input name="bar" type="hidden" value=""><span class="bg s_ipt_wr iptfocus quickdelete-wrap"><span class="soutu-btn"></span><input name="wd" class="s_ipt" id="kw" maxlength="255" value="" autocomplete="off"><a title="清空" class="quickdelete" id="quickdelete" style="top: 0px; right: 0px; display: none;" href="javascript:;"></a><span class="soutu-hover-tip" style="display: none;">按图片搜索</span></span><span class="bg s_btn_wr"><input class="bg s_btn" id="su" type="submit" value="百度一下"></span><span class="tools"><span id="mHolder"><div id="mCon"><span>输入法</span></div><ul id="mMenu"><li><a name="ime_hw" href="javascript:;">手写</a></li><li><a name="ime_py" href="javascript:;">拼音</a></li><li class="ln"></li><li><a name="ime_cl" href="javascript:
;">关闭</a></li></ul></span></span><input name="rn" type="hidden" value=""><input name="fenlei" type="hidden" value="256"><input name="oq" type="hidden" value=""><input name="rsv_pq" type="hidden" value="8da8d8ec001a725c"><input name="rsv_t" type="hidden" value="b2b39kZjoN4DHoLoPMw+sMpFZqL/TpIfDe8w9ONePLlGObWa6DFTgMgCmyY"><input name="rqlang" type="hidden" value="cn"><input name="rsv_dl" type="hidden" value="ib"><input name="rsv_enter" type="hidden" value="1">
OuterHtml:
<form name="f" class="fm" id="form" action="/s"><input name="ie" type="hidden" value="utf-8"><input name="f" type="hidden" value="8"><input name="rsv_bp" type="hidden" value="1"><input name="rsv_idx" type="hidden" value="1"><input name="ch" type="hidden" value=""><input name="tn" type="hidden" value="baidu"><input name="bar" type="hidden" value=""><span class="bg s_ipt_wr iptfocus quickdelete-wrap"><span class="soutu-btn"></span><input name="wd" class="s_ipt" id="kw" maxlength="255" value="" autocomplete="off"><a title="清空" class="quickdelete" id="quickdelete" style="top: 0px; right: 0px; display: none;" href="javascript:;"></a><span class="soutu-hover-tip" style="display: none;">按图片搜索</span></span><span class="bg s_btn_wr"><input class="bg s_btn" id="su" type="submit" value="百度一下"></span><span class="tools"><span id="mHolder"><div id="mCon"><span>输入法</span></div><ul id="mMenu"><li><a name="ime_hw" href="javascript:;">手写</a></li><li><a name="ime_py" href="javascript:;">拼音</a></li><li class=
"ln"></li><li><a name="ime_cl" href="javascript:;">关闭</a></li></ul></span></span><input name="rn" type="hidden" value=""><input name="fenlei" type="hidden" value="256"><input name="oq" type="hidden" value=""><input name="rsv_pq" type="hidden" value="8da8d8ec001a725c"><input name="rsv_t" type="hidden" value="b2b39kZjoN4DHoLoPMw+sMpFZqL/TpIfDe8w9ONePLlGObWa6DFTgMgCmyY"><input name="rqlang" type="hidden" value="cn"><input name="rsv_dl" type="hidden" value="ib"><input name="rsv_enter" type="hidden" value="1"></form>
从以上的返回结果,大家也可以看出document 对象的innerHtml和OuterHtml属性的不同。
本节知识点回向:
HTML DOM对象常用的方法有哪些?如何利用
本节参考文件:008工作表.xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:
做人是一件很麻烦的事,所有说法和实情之间都存在这巨大的空隙,好像一生都在和这个东西挣扎,分辨力越强这空隙越深不见底,最后似乎只好把空虚视为答案和真相。。