VBA處理網(wǎng)頁基礎(chǔ)二Word版_第1頁
VBA處理網(wǎng)頁基礎(chǔ)二Word版_第2頁
VBA處理網(wǎng)頁基礎(chǔ)二Word版_第3頁
VBA處理網(wǎng)頁基礎(chǔ)二Word版_第4頁
VBA處理網(wǎng)頁基礎(chǔ)二Word版_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、VBA的WEB應(yīng)用系列教程HTML文檔篇上節(jié)課,我們說了HTTP通訊,HTTP通訊一般情況返回的是啥呢?是頁面的源代碼。例如,我們?cè)L問百度,返回了,“<!doctype html><html>”一大堆東西。就是,我們?cè)陧撁纥c(diǎn)擊右鍵,“查看頁面源文件”,如圖:我們的瀏覽器,正是把這堆源代碼,翻譯成我們可視的生動(dòng)地頁面的。就像VBA一樣,這堆代碼是什么語言呢,就是通常所說的,超文本標(biāo)記語言。為啥叫標(biāo)記語言,因?yàn)樗荒苡糜谡故?,展示我們所看到的網(wǎng)頁頁面。不是編程語言哦。為啥叫超文本呢,大家仔細(xì)看,這堆源代碼有什么特征呢,就是有很多<>這樣的文本,一般而言,我們把&

2、lt;>叫做標(biāo)簽,細(xì)心的同學(xué)可以發(fā)現(xiàn),標(biāo)簽都是成對(duì)出現(xiàn)的,例如“<title>百度一下,你就知道 </title>”。第一個(gè)叫做開始標(biāo)簽,第二個(gè)多帶了個(gè)/叫結(jié)束標(biāo)簽。標(biāo)簽之間就是網(wǎng)頁的文本,例如這個(gè)例子,就是我們網(wǎng)頁標(biāo)題的文本“百度一下,你就知道”。所以,標(biāo)簽的作用就是,給文本打上標(biāo)記,告訴瀏覽器,怎么顯示這個(gè)文本。例如本例,要求瀏覽器把“百度一下,你就知道”顯示成網(wǎng)頁的標(biāo)題。HTML文檔=文本+標(biāo)簽,所以就超文本啦。1 / 36總之,HTML就是用來描述網(wǎng)頁的語言,像上面所說的<title>這樣的標(biāo)簽,是有一整套的,呵呵。我們的教程,并不是為了教大家

3、,怎么去做網(wǎng)頁,設(shè)計(jì)網(wǎng)頁,因此,大家僅僅需要,大致的了解一些HTML系列的文本標(biāo)記語言的基礎(chǔ)即可,知道常用的幾個(gè)標(biāo)簽,有什么用即可。一、網(wǎng)頁數(shù)據(jù)提取常見的HTML標(biāo)簽/元素上面說了,標(biāo)簽是用來描述網(wǎng)頁的。瀏覽器讀取HTML文檔,識(shí)別標(biāo)簽,并按標(biāo)簽要求以網(wǎng)頁進(jìn)行顯示文本。大部分標(biāo)簽都是成隊(duì)出現(xiàn)的。起始標(biāo)簽和結(jié)束標(biāo)簽之間的所有文本,都叫做元素。也就是這個(gè)格式就是:<起始標(biāo)簽:也叫元素名>元素的內(nèi)容<結(jié)束標(biāo)簽:/+元素名>標(biāo)簽是可以擁有屬性的,因此起始標(biāo)簽,有時(shí)候格式如下:<元素名 屬性名稱=”屬性值”>屬性提供了元素的一些附加信息啦,后面我們講具體標(biāo)簽,大家就會(huì)

4、見到屬性怎么用。另外,注意,元素是可以擁有元素的,即某個(gè)元素的內(nèi)容有時(shí)候是一個(gè)子元素。元素這東西,比較抽象,我們可以把它且當(dāng)作一個(gè)對(duì)象來理解,例如工作簿對(duì)象,每個(gè)工作簿的名稱都不一樣(屬性),每個(gè)工作簿里面都有工作表(子元素),每個(gè)表都有名稱(屬性),里面填寫的內(nèi)容也不一樣(元素的內(nèi)容)。下面講講常見的和我們網(wǎng)頁數(shù)據(jù)提取要常見的元素/標(biāo)簽。(一) 整體框架結(jié)構(gòu):每個(gè)網(wǎng)頁文檔,都是有個(gè)大致的框架,框架如下:<html> <head> <!-注釋:文檔頭部,文檔相關(guān)消息,并不提供文檔內(nèi)容-><title> 網(wǎng)頁標(biāo)題</title><

5、/head><body> <!-注釋:文檔主體-> 網(wǎng)頁文檔主體</body></html>把上面這段文本保存在TXT文件里面,然后另存.html格式,就可以得到最基礎(chǔ)的頁面。從上面的框架代碼,我們可以看出,一般的頁面,都有html元素,其一般內(nèi)含兩個(gè)元素,一個(gè)是head元素,一個(gè)是body元素。Head元素僅僅說明文檔的相關(guān)消息,并不展示文檔實(shí)體,body元素才是真正展示文檔主體的,所有要在頁面展示的元素,都要在body內(nèi)進(jìn)行書寫。后面的元素的測試,都是以替換掉body元素內(nèi)的文本“網(wǎng)頁文檔主體”進(jìn)行書寫,后續(xù)不再復(fù)述這個(gè)框架。(二)段落

6、<p>特別是提取小說,新聞等頁面的消息,文本都是一段一段的,這樣的頁面,一般是通過<p>標(biāo)簽實(shí)現(xiàn)的。這個(gè)沒啥好說的,自己動(dòng)手試看看就知道。 所以,當(dāng)運(yùn)用ie/webbrowser方式提取這類網(wǎng)頁的時(shí)候,歷遍段落p元素即可。(三)超鏈接<a>超鏈接是我們最常見的頁面元素,基本的門戶網(wǎng)站都有他,點(diǎn)了以后,可以跳轉(zhuǎn)到另一個(gè)頁面。一般語法格式:<a href=”跳轉(zhuǎn)的URL” target=” _blank/_self”>顯示的超鏈接文本</a>Target屬性,表示的是,當(dāng)我們點(diǎn)擊超鏈接,是在原頁面進(jìn)行跳轉(zhuǎn)(_self)還是新建頁面進(jìn)行跳轉(zhuǎn)

7、(_blank)。測試做個(gè)ET的超鏈接吧。(四)圖像<img>圖像標(biāo)簽用法和超鏈接類似,語法:<img src=”url” alt=”文本”>alt屬性代表的是,當(dāng)圖片無法加載的時(shí)候,替換顯示的文本。我們做個(gè)加載ET的LOGO的頁面玩玩。(五)表格<table>表格是我們網(wǎng)頁最常見的,也是我們網(wǎng)頁數(shù)據(jù)提取,最需要打交道的,其實(shí)它非常簡單,框架如下,每行用<tr>,每個(gè)單元格用<td>:<table border="1"> <!-注釋:border設(shè)置表格邊框樣式-><tr><

8、;td>第一行第一個(gè)單元格</td><td>第一行第二個(gè)單元格</td></tr><tr><td>第二行第一個(gè)單元格</td><td>第二行第二個(gè)單元格</td></tr></table>(六)列表很多時(shí)候,數(shù)據(jù)也經(jīng)常以列表形式存在的,列表有三種:無序、有序和自定義。分別框架如下:1、無序列表<ul><ul><li>函數(shù)</li><li>VBA</li></ul>2、有序列表

9、<ol><ol><li>圖書 <ol> <li>VBA</li> <li>函數(shù)</li> </ol> </li> <li>視頻 <ol> <li>基操</li> <li>圖表</li><li>數(shù)透</li> </ol> </li></ol>3、自定義列表<dl><dl><dt>第一節(jié)課</dt>&l

10、t;dd>網(wǎng)絡(luò)通訊</dd><dt>第二節(jié)課</dt><dd>HTML</dd></dl>(七)表單和表單控件除了表格,表單也是我們?cè)诰W(wǎng)頁數(shù)據(jù)提取,頁面操控最常見到的元素。例如我們注冊(cè)用戶,例如我們的微博登陸,例如我們的百度搜索,其實(shí)都是表單。我們先來看一個(gè)例子:<p>請(qǐng)?jiān)谖谋究蜉斎胍阉鞯年P(guān)鍵字,后按提交,將提交百度進(jìn)行搜索</p><form method="get" action=" <input name="wd" type=

11、"text" value="exceltip"> <input type="submit" value="提交"></form>例如在文本框輸入“蘋果”后,按提交按鈕: 這個(gè)表單模擬的是百度搜索,在文本框輸入關(guān)鍵字后,按提交,將跳轉(zhuǎn)至百度的搜索結(jié)果的界面。呵呵,奇妙吧。如何實(shí)現(xiàn)的呢?細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)吧,表單form這個(gè)元素,有“method”和“action”兩個(gè)屬性,action屬性指定的就是,提交表單后,向這個(gè)屬性指定URL發(fā)送http請(qǐng)求(呵呵,涉及到第一節(jié)課的知識(shí)啦),meth

12、od這個(gè)屬性設(shè)定的就是,要按照get或者post等方式發(fā)送http請(qǐng)求。復(fù)習(xí)下第一節(jié)課吧,采用get的方式呢,參數(shù)將在URL后面加個(gè)?號(hào),然后發(fā)送,采用post的方式呢,將在消息主體里面投遞查詢參數(shù)。那發(fā)送http請(qǐng)求的參數(shù)從哪里來的?就是從表單元素內(nèi)含的各種下屬元素,提取其name屬性的值,作為參數(shù)名,然后提取該元素的value屬性作為參數(shù)值(value屬性的值有時(shí)候是由我們輸入的,例如本例,雖然我們指定了默認(rèn)的value屬性的值為exceltip,但是我們可以手動(dòng)輸入,把它修改成“蘋果”)。然后瀏覽器就用參數(shù)名=參數(shù)值和&進(jìn)行連接(還是上節(jié)課的知識(shí))串起來。就如本例,提交后,觀察U

13、RL為:下面,我們講講表單主要的內(nèi)含子元素吧。1、輸入標(biāo)簽(<input>)其語法是:<input type=類型 name=元素名稱 id=元素id value=元素值/>其類型由type屬性定義,常見的有:text(文本框)、Radio(單選按鈕)、Checkboxes(復(fù)選框)、submit(提交按鈕)、hidden(隱藏)、reset(重置)和password(密碼框)等。其中注意,其中單選框和復(fù)選框的是否選中,由checked屬性指定,如果值是”checked”則選定。不多說了,看例子吧。(文本框和提交按鈕就不做了,上面都舉例了。密碼框同,類似的)<fo

14、rm><input name="ch1" type="checkbox" value="excel" checked="checked">表格設(shè)計(jì)<input name="ch2" type="checkbox" value="word">文檔處理<input name="ch3" type="checkbox" value="ppt" checked=&quo

15、t;checked">幻燈片</br><input name="rd" type="radio" value="100" checked="checked">vip<input name="rd" type="radio" value="10">普通會(huì)員</br><input type="reset" value="重置"></form

16、>注意,當(dāng)表單提交的時(shí)候,發(fā)送http請(qǐng)求時(shí),單選框和復(fù)選框,僅發(fā)送checked屬性為”checked”的元素。一樣是把標(biāo)記了checked的元素的name屬性值和value屬性值串起來。2、下拉列表<select>其語法:<select multiple="multiple" name=名稱 size=顯示菜單條目數(shù)>如果存在multiple="multiple"的屬性設(shè)定,則允許菜單多選,否則單選。Size是設(shè)置可見的菜單條目數(shù)。其下級(jí)元素,option代表的是其每個(gè)菜單項(xiàng)目,語法為:<option value=

17、值 selected="selected">顯示文字</option>一樣,value屬性接著的就是發(fā)往服務(wù)器的值,當(dāng)提交的時(shí)候,就是將select的name屬性值與用戶選擇的某項(xiàng)option元素的value屬性值連接,進(jìn)行發(fā)送。Option元素的selected屬性設(shè)置的是默認(rèn)選中的菜單項(xiàng)。示例如下: <p>單選選擇列表</p> <form> <select name="sel"> <option value="1">圖書</option> &

18、lt;option value="2">視頻</option> <option value="3" selected="selected">動(dòng)畫</option> <option value="4">圖解</option> </select> </form> <p>多重選擇列表,按住shift或ctrl鍵進(jìn)行多重選擇</p> <form> <select multiple="

19、multiple" name="sel" size=2> <option>excel</option> <option>word</option> <option>ppt</option> </select> </form>(八)框架<frame> 標(biāo)簽和<iframe> 標(biāo)簽1、frameset和frameFrame是獨(dú)立框架,就好像我們的分屏瀏覽一樣,一個(gè)屏幕,瀏覽多個(gè)畫面一樣。語法如下:<html><frameset

20、 cols="a%,b%,"/ rows =”*,100”> <frame src="頁面A" /> <frame src="頁面 B" /></frameset></html>首先框架必須放置在框架結(jié)構(gòu)標(biāo)簽里面(<frameset>),其rows/columns 屬性的值規(guī)定了框架每行或每列占據(jù)屏幕的面積。另外,frameset和body不能同時(shí)使用,除非有noframes,很簡單,因?yàn)閒rame其實(shí)就描繪文檔了,所以,一般不需要再有body進(jìn)行描繪。另外,框架元素一

21、般放置于head元素內(nèi)。Frame元素的src屬性就是設(shè)定了其框架內(nèi)顯示頁面的URL。示例如下:<html> <!-注釋:文檔跟元素-> <head> <!-注釋:文檔頭部,文檔相關(guān)消息,并不提供文檔內(nèi)容-><title> 框架測試文檔</title> <frameset rows="50%,50%"> <frame src=""> <frame src=""> </frameset></head><

22、;/html>2、iframeIframe的框架,就類似畫中畫的效果,在原頁面插入一個(gè)頁面。語法如下:<iframe src =url scrolling=yes/no/auto height=xx width=xx>Src設(shè)定框架內(nèi)要顯示的文檔的url,scrolling設(shè)置是否顯示滾動(dòng)條。Height和widty設(shè)置的就是它的高度和寬度。案例如下:<p>第一個(gè)框架</p><iframe src=""></iframe> </br> <p>第二個(gè)框架</p> <if

23、rame src=""></iframe> Html就大概講這一些吧,呵呵,畢竟我們不是要做網(wǎng)頁,大家大致了解下就是,還可以參考去學(xué)習(xí)。一般能做到,看得懂網(wǎng)頁的框架結(jié)構(gòu)即可。二、HTML 文檔對(duì)象模型(HTML DOM)認(rèn)識(shí)了網(wǎng)頁文檔上面的各種元素,我們?cè)趺丛L問他們呢,是通過什么機(jī)制實(shí)現(xiàn)的呢?HTML文檔,向程序們,提供了訪問其元素的端口,這就是HTML DOM,其定義了一套標(biāo)準(zhǔn)的針對(duì) HTML 文檔的對(duì)象訪問或操作的機(jī)制?,F(xiàn)在DOM有多個(gè)版本,本文還是以最基礎(chǔ)的DOM 1(98年頒布)這個(gè)版本。1、VBA訪問IE網(wǎng)頁文檔的程序模板講訪問前,我們先簡要講講

24、,如何用VBA調(diào)用IE,直接給個(gè)模板吧,詳細(xì)的IE對(duì)象的屬性和方法等,我們后面的課會(huì)再講:Sub test()Dim ie, dmt Set ie = CreateObject("InternetExplorer.Application") '創(chuàng)建一個(gè)IE對(duì)象 With ie .Visible = True '顯示它 .navigate "" '加載某個(gè)頁面 Do Until .ReadyState = 4 '等待頁面加載完畢 DoEvents Loop Set dmt = .document '將IE瀏覽器加載的

25、頁面文檔,賦予dmt變量 開始操縱頁面,或者提取數(shù)據(jù)啦 End WithEnd Sub通過上面這個(gè)模板,我們就可以創(chuàng)建一個(gè)IE對(duì)象,并將其頁面文檔對(duì)象賦予dmt變量,這樣,我們通過dmt變量,就可對(duì)頁面元素,進(jìn)行后續(xù)的訪問以及操作。2、HTML DOM 對(duì)象和我們EXCEL的對(duì)象集合的層次結(jié)構(gòu)類似(WORKBOOKS-WORKSHEETS-CELLS等),HTML DOM為網(wǎng)頁文檔也組織了一個(gè)對(duì)象集合的分層次模型。另外,從上一節(jié)標(biāo)簽和元素的學(xué)習(xí),大家也可以大致的得知,元素是可以擁有元素的,所以,這個(gè)分層的模型完全是合理的。HTML DOM的對(duì)象模型類似如下圖:但是,VBA直接支持調(diào)用的對(duì)象有限

26、,如下:對(duì)象描述Document代表整個(gè) HTML 文檔,可被用來訪問頁面中的所有元素Anchors代表 <a> 元素集合Body代表 <body> 元素Forms代表 <form> 元素集合Frames代表 <frame> 元素或<iframe> 元素集合Images代表 <img> 元素集合Links代表 <link> 元素集合Options代表 <option> 元素集合(select元素里面可以直接使用)Cells代表 <td> 元素集合(table元素里面可以直接使用)Rows

27、代表 <tr> 元素集合(table元素里面可以直接使用)All對(duì)象集合,提供對(duì)文檔中所有 HTML 元素的訪問。VBA支持直接調(diào)用對(duì)象的元素,調(diào)用就非常方便了,可以用序號(hào)調(diào)用,例如forms(0),也可以按名稱/ID調(diào)用,例如forms(“名稱/ID”)。其他沒法直接調(diào)用對(duì)象的元素,可以間接從通用all對(duì)象集合中去調(diào)用該元素或該元素對(duì)應(yīng)的dom對(duì)象,或者還可以從文檔樹模型去調(diào)用。如下闡述。3、文檔樹在HTML DOM中,文檔的每一部分都是節(jié)點(diǎn),整個(gè)文檔被定義為一個(gè)文檔節(jié)點(diǎn),每個(gè)標(biāo)簽是一個(gè)元素節(jié)點(diǎn),包含在元素中的文本是文本節(jié)點(diǎn),每一個(gè)元素的屬性是一個(gè)屬性節(jié)點(diǎn)。形象的比喻做一棵樹吧,

28、根節(jié)點(diǎn)就是html,主干就是body等,枝干就是body內(nèi)含的各種元素節(jié)點(diǎn),葉子和花就是元素節(jié)點(diǎn)關(guān)聯(lián)的元素的屬性(屬性節(jié)點(diǎn))或內(nèi)含文本(文本節(jié)點(diǎn))。自己畫的圖太丑了,直接引用w3school的圖吧:當(dāng)HTML DOM在解析網(wǎng)頁文檔的時(shí)候,就按整個(gè)文檔的結(jié)構(gòu)生成一棵樹,全部保存在內(nèi)存中,我們可以隨時(shí)訪問任何節(jié)點(diǎn)。總之,網(wǎng)頁文檔,可以說是由元素組合而成的,也可以說是由節(jié)點(diǎn)連接而成的樹構(gòu)造的。節(jié)點(diǎn)是文檔樹結(jié)構(gòu)中特有的名詞,元素是節(jié)點(diǎn),但是節(jié)點(diǎn)不一定是元素,節(jié)點(diǎn)還有文檔節(jié)點(diǎn)、文本節(jié)點(diǎn)、屬性節(jié)點(diǎn)等;元素是元素節(jié)點(diǎn)的擴(kuò)展,元素可以擁有屬性還有文本。初學(xué)者不是很必要糾結(jié)元素和節(jié)點(diǎn)的區(qū)別,這個(gè)需要甚至數(shù)據(jù)結(jié)構(gòu)

29、、類和繼承等知識(shí)??纱笾吕斫鉃?,同一個(gè)html dom對(duì)象,提供的兩個(gè)不同接口。有興趣的朋友,可以按F8運(yùn)行下面這個(gè)程序,然后本地窗口觀察bd這個(gè)dody對(duì)象,你會(huì)發(fā)現(xiàn),他既有支持node(節(jié)點(diǎn))的相關(guān)屬性和方法,也提供了element(元素)的相關(guān)屬性和方法。Sub test()Dim ie, dmt, bd Set ie = CreateObject("InternetExplorer.Application") '創(chuàng)建一個(gè)IE對(duì)象 With ie .Visible = True '顯示它 .navigate "" '加載某個(gè)

30、頁面 Do Until .ReadyState = 4 '等待頁面加載完畢 DoEvents Loop Set dmt = .document '將IE瀏覽器加載的頁面文檔,賦予dmt變量 Set bd = dmt.body '將文檔的body賦予bd變量 End WithEnd Sub4、如何通過文檔樹查找所需的網(wǎng)頁元素打個(gè)比方吧,當(dāng)我們要掏大樹上的鳥窩,有幾種方式呢?(1)首先,當(dāng)我們可以目測到,鳥窩在哪個(gè)節(jié)點(diǎn)的時(shí)候,我們可以用梯子,爬上去,直接掏。因此,當(dāng)我們可以很清晰的觀測到,節(jié)點(diǎn)的某些屬性時(shí),就可以直接定位它。元素節(jié)點(diǎn)的主要的定位屬性有:id、name和索引號(hào)

31、。還記得嗎,元素起始標(biāo)簽的語法:<標(biāo)簽 id="xx" name="xx" value=”xx”.>,當(dāng)初一定很疑惑吧,為啥要有名字或id等屬性,現(xiàn)在明白了吧,和我們的姓名和學(xué)號(hào)一樣,為了比較容易的找到我們。那索引號(hào)是什么呢,就例如我們從樹根出發(fā),清點(diǎn)樹上的果子,給每個(gè)果子編號(hào),這樣我們就很容易知道,哪個(gè)號(hào)的果子成熟了,或者被蟲子咬了。一樣的,我們可以按源代碼書寫的順序,給每類的元素的成員進(jìn)行編號(hào)(類似每類元素,形成一個(gè)數(shù)組,從0開始編號(hào))。通過元素類別和編號(hào),我們可以很容易的找到它。另外,例如我們中學(xué)的老師,上課時(shí),要抓人提問,可以用學(xué)號(hào),

32、也可以通過小組,哪一排,第幾個(gè)學(xué)生,起來提問。因此,索引號(hào),也有整個(gè)文檔的,和同類元素之分。殊途同歸,無論你點(diǎn)這個(gè)學(xué)員的學(xué)號(hào),還是從他的組別的座位號(hào)去找他,都是可以的。所以,按統(tǒng)計(jì)方式或者起始節(jié)點(diǎn)的不同,索引號(hào)也會(huì)不同。剛剛說的查找工具(也就是打比方里面的梯子)有以下這些:getElementById(“元素的id屬性”)或all(“元素的id屬性”):返回?fù)碛兄付╥d的元素集合getElementsByName(“元素的name屬性”)或all(“元素的name屬性”):返回?fù)碛兄付Q的元素的集合getElementsByTagName(“標(biāo)簽名稱”)或all.tags(“標(biāo)簽名稱”):返

33、回該類標(biāo)簽的元素集合。all(索引號(hào)):返回指定索引號(hào)的元素節(jié)點(diǎn)。(2)其次,當(dāng)我們僅聽到鳥鳴聲,卻不知道鳥窩在哪里的時(shí)候,有時(shí)候,我們只能順藤摸瓜,開始爬樹,沿著樹干進(jìn)行判斷,最后攀爬到鳥窩處?;蛘?,可能大概知道個(gè)方位,先架梯子,到某個(gè)主干,再從那里開始查找。因此,當(dāng)我們找不到清晰的屬性去定位網(wǎng)頁元素時(shí),我們可以從body元素/節(jié)點(diǎn)開始,一級(jí)級(jí)去尋找,也可以先定位到它的毗鄰節(jié)點(diǎn)/元素,再通過判斷,去查找它的精確位置。從節(jié)點(diǎn)方面而言,樹形的模型的節(jié)點(diǎn)有個(gè)特征,除了根節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)均只有一個(gè)父節(jié)點(diǎn)(parentNode),有一個(gè)或者多個(gè)子節(jié)點(diǎn)(childNodes,類似一個(gè)對(duì)象集合或?qū)ο髷?shù)組,從

34、0開始編號(hào))。因此,通過節(jié)點(diǎn)的親屬關(guān)系,進(jìn)行判斷查找,我們就可以一步步的在父子節(jié)點(diǎn)中切換,獲取所需的元素。節(jié)點(diǎn)有一些屬性,可以利于我們的查找判斷,如下:nodeName(節(jié)點(diǎn)名稱):元素節(jié)點(diǎn)的名稱為其標(biāo)簽名,屬性節(jié)點(diǎn)的名稱為其屬性名稱;nodeValue(節(jié)點(diǎn)值):文本節(jié)點(diǎn)的值為其包含的文本,屬性節(jié)點(diǎn)的值為其包含的屬性值;nodeType(節(jié)點(diǎn)類型):元素節(jié)點(diǎn)為1、屬性節(jié)點(diǎn)為2、文本節(jié)點(diǎn)為3、注釋節(jié)點(diǎn)為8、文檔節(jié)點(diǎn)為9另外,從元素方面而言,要定位元素的父元素可以通過parentElement屬性,定位元素的子元素集合可以通過children屬性,判斷其標(biāo)簽的名稱(tagname),他的值(va

35、lue),內(nèi)含文本(innertext)等方式來進(jìn)行查找。最后,定位節(jié)點(diǎn)/元素的下一個(gè)同級(jí)兄弟可以通過nextSibling屬性,定位上一個(gè)同級(jí)兄弟可以用previousSibling屬性。示例的話,后面一起展示。先學(xué)懂方法吧。5、網(wǎng)頁元素分析工具工欲善其事,必先利其器,很多高手已經(jīng)提供給我們很多好用的網(wǎng)頁元素的分析工具,我們?cè)趺从盟麄兡??講兩個(gè)工具,一個(gè)是網(wǎng)頁精靈(按鍵精靈論壇的作品),一個(gè)是firebug。首先是網(wǎng)頁按鍵精靈。如附件,操作如下圖,輸入網(wǎng)址,按“網(wǎng)頁分析”,然后按F9,將鼠標(biāo)指向需要分析的頁面元素,例如文本框,則得出元素相關(guān)的屬性。下方得出的有,標(biāo)簽的名稱,元素的id,元素的

36、name,元素的索引號(hào)(第幾個(gè)input標(biāo)簽,從0開始編號(hào))。復(fù)習(xí)下上面說的概念?就想象網(wǎng)頁文檔是個(gè)班級(jí),標(biāo)簽就是學(xué)習(xí)小組,其中input這個(gè)學(xué)習(xí)小組里面,有個(gè)人的名字name是wd,他的工號(hào)id是kw,它在小組里面座位號(hào)是0。我們,就是用這些標(biāo)示,來找到這個(gè)元素的。另外,在firefox瀏覽器,還可以使用firebug,直接對(duì)頁面元素單擊右鍵,使用“使用firebug查看元素”的菜單。這樣可以直接觀察到該元素的網(wǎng)頁源代碼,然后進(jìn)行分析。6、常見HTML DOM 對(duì)象的屬性、方法以及示例(1)通用的屬性和方法i.四個(gè)常用的通用屬性對(duì)象.innerHtml:對(duì)象內(nèi)部的HTML代碼對(duì)象.Outer

37、Html:對(duì)象的HTML代碼,包括對(duì)象本身的HTML標(biāo)簽對(duì)象.innerText:對(duì)象內(nèi)部的文本對(duì)象.OuterText:對(duì)象的文本,包括對(duì)象本身的文本舉例,我們?nèi)ゲ蹲桨俣仁醉?,那個(gè)提交搜索的表單。這個(gè)表單的名稱是”f”,然后查詢它的innerHtml和OuterHtml。Sub test() Dim ie, dmt, an Set ie = CreateObject("InternetExplorer.Application") '創(chuàng)建一個(gè)IE對(duì)象 With ie .Visible = True '顯示它 .navigate "" &#

38、39;加載某個(gè)頁面 Do Until .ReadyState = 4 '等待頁面加載完畢 DoEvents Loop Set dmt = .document '將IE瀏覽器加載的頁面文檔,賦予dmt變量 Set an = dmt.forms("f") Debug.Print "innerHtml:", an.innerhtml Debug.Print "OuterHtml:", an.OuterHtml End WithEnd Sub觀察一下立即窗口輸出的區(qū)別,很容易就知道inner和outer的區(qū)別了。ii.一個(gè)常用

39、的通用方法fireevent(發(fā)送事件)HTML DOM 對(duì)象,和我們EXCEL對(duì)象,都具有屬性、方法和事件。前面所述的innerhtml那些都是屬性,方法就是我們要給這個(gè)對(duì)象執(zhí)行什么動(dòng)作,比如點(diǎn)擊網(wǎng)頁上一個(gè)按鈕,按鈕這個(gè)對(duì)象就被“click”了,click就是按鈕對(duì)象的一個(gè)方法。另外,網(wǎng)頁對(duì)象也像我們的工作表一樣,也支持識(shí)別事件,例如,當(dāng)按鈕被點(diǎn)擊了,系統(tǒng)就會(huì)觸發(fā)“oncilck”(被點(diǎn)擊了這個(gè)事件),然后依據(jù)網(wǎng)頁源代碼里面設(shè)定好處理步驟去處理這個(gè)事件。主要的事件,整理如下:事件適用元素何時(shí)觸發(fā)onloadBody和frame文檔加載時(shí)onchange表單元素當(dāng)元素改變時(shí)onsubmit表單

40、元素當(dāng)表單被提交時(shí)onreset表單元素當(dāng)表單被重置時(shí)onselect表單元素當(dāng)元素被選取時(shí)onblur表單元素和超鏈接元素當(dāng)元素失去焦點(diǎn)時(shí)onfocus表單元素和超鏈接元素當(dāng)元素獲得焦點(diǎn)時(shí)onkeydownBody和表單元素當(dāng)鍵盤被按下時(shí)onkeypressBody和表單元素當(dāng)鍵盤被按下后又松開時(shí)onkeyupBody和表單元素當(dāng)鍵盤被松開時(shí)onclick大部分元素當(dāng)鼠標(biāo)被單擊時(shí)ondblclick大部分元素當(dāng)鼠標(biāo)被雙擊時(shí)onmousedown大部分元素當(dāng)鼠標(biāo)按鈕被按下時(shí)onmousemove大部分元素當(dāng)鼠標(biāo)指針移動(dòng)時(shí)onmouseout大部分元素當(dāng)鼠標(biāo)指針移出某元素時(shí)onmouseover

41、大部分元素當(dāng)鼠標(biāo)指針懸停于某元素之上時(shí)onmouseup大部分元素當(dāng)鼠標(biāo)按鈕被松開時(shí)那fireevent這個(gè)方法又是何用呢,他的作用就是,代替我們的一些操作,直接激發(fā)某些對(duì)象的某些事件。例如我們附件的fireevent示例.html,點(diǎn)擊文檔主體的”點(diǎn)我一下”,將彈出對(duì)話框。下面,我們用程序模擬,這個(gè)點(diǎn)擊事件的觸發(fā)。新建一個(gè)excel,放置于和fireevent示例.html同文件夾下的目錄里。Sub test() Dim ie, dmt, fm Set ie = CreateObject("InternetExplorer.Application") '創(chuàng)建一個(gè)I

42、E對(duì)象 With ie .Visible = True '顯示它 .navigate ThisWorkbook.Path & " fireevent示例.html" '加載某個(gè)頁面 Do Until .ReadyState = 4 '等待頁面加載完畢 DoEvents Loop Set dmt = .document '將IE瀏覽器加載的頁面文檔,賦予dmt變量 dmt.body.FireEvent "onclick" '觸發(fā)body的點(diǎn)擊事件 End WithEnd Sub這樣,程序就模擬了我們點(diǎn)擊了bo

43、dy后激發(fā)的事件。一樣,我們也可以用dmt.body.Click,這個(gè)方法取激發(fā)事件,殊途同歸。Fireevent主要用于,有的表單的校驗(yàn)機(jī)制非常強(qiáng),需要光標(biāo)聚焦了,文本change了等等,才能提交表單,這些事件的模擬只能靠fireevent了,其他方法就很難替代了。(2)表單和表單控件對(duì)象表單form對(duì)象,有一個(gè)方法比較重要,就是submit,這個(gè)方法提供了表單的提交的動(dòng)作。如果我們捕捉頁面的提交按鈕非常困難時(shí),有時(shí)候只要對(duì)表單,執(zhí)行submit方法,表單也是可以提交的,不需去點(diǎn)擊提交按鈕。表單控件,文本輸入類控件,最常用就是value的屬性了,通過這個(gè)屬性,可以往文本框里面添加文本。單選框

44、、復(fù)選框,常用的就是checked屬性了,如果為true就是被選中了,或者直接使用click方法也行。下拉列表呢,如果是單選列表框,可通過selectedIndex屬性去設(shè)置選中項(xiàng)(下拉選項(xiàng),從1開始編號(hào),如2就是選擇下拉列表的第二個(gè)選項(xiàng)),也可以通過value屬性,直接把value指定為要選定的option的value即可,但多選列表框不可用這兩個(gè)屬性。另外,所有類別的列表框,都可以通過其內(nèi)含對(duì)象集合options(),設(shè)置某個(gè)options(x)的selected屬性為true,來設(shè)置選中項(xiàng)。還是以百度首頁為示例,我們用程序模擬鍵入查詢數(shù)據(jù)“exceltip”,然后提交查詢?yōu)檠菔景?。Sub

45、 test() Dim ie, dmt, fm Set ie = CreateObject("InternetExplorer.Application") '創(chuàng)建一個(gè)IE對(duì)象 With ie .Visible = True '顯示它 .navigate "" '加載某個(gè)頁面 Do Until .ReadyState = 4 '等待頁面加載完畢 DoEvents Loop Set dmt = .document '將IE瀏覽器加載的頁面文檔,賦予dmt變量 Set fm = dmt.forms("f&quo

46、t;) '用表單的名稱f,捕捉表單對(duì)象 dmt.all("kw").Value = "exceltip" '用搜索欄的id”kw”捕捉它,并鍵入exceltip dmt.all.tags("input")(3).Click '用“百度一下”按鈕的input索引號(hào)捕捉它,并模擬按鈕的點(diǎn)擊 'fm.submit '模擬表單的提交,不一定要click End WithEnd Sub(3)Table 對(duì)象表格對(duì)象,也是我們提取網(wǎng)頁數(shù)據(jù),最常打交道的對(duì)象了。其內(nèi)含rows對(duì)象集合,可以使我們?cè)L問表格內(nèi)的每

47、行,每個(gè)row對(duì)象還內(nèi)含cells對(duì)象集合,使我們可以訪問其每行的每個(gè)單元格,讀取每個(gè)單元格的innertext屬性即可獲取我們所需每個(gè)單元格的文本。另外,常用的屬性還有l(wèi)ength,這個(gè)類似我們VBA里面的count,都是返回某個(gè)對(duì)象的數(shù)量。我們以提取東方財(cái)富網(wǎng)的限售股解禁清單的table為例,URL:Sub test() Dim ie, dmt, tb, i&, j& Set ie = CreateObject("InternetExplorer.Application") '創(chuàng)建一個(gè)IE對(duì)象 With ie .Visible = True &#

48、39;顯示它 .navigate " '加載某個(gè)頁面 Do Until .ReadyState = 4 '等待頁面加載完畢 DoEvents Loop Set dmt = .document '將IE瀏覽器加載的頁面文檔,賦予dmt變量 Set tb = dmt.all.tags("table")(3) '通過索引號(hào)捕捉表格對(duì)象 For i = 0 To tb.Rows.Length - 1 '歷遍其每個(gè)行 For j = 0 To tb.Rows(i).Cells.Length - 1 '歷遍每行的每個(gè)單元格 Cells(i + 1, j + 1) = tb.Rows(i).Cells(j).innertext '將其innertext寫入單元格

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論