小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

具有自動(dòng)查找Web頁面上所有鏈接的網(wǎng)絡(luò)瀏覽器

 sumstars 2014-11-19
       

具有自動(dòng)查找Web頁面上所有鏈接的網(wǎng)絡(luò)瀏覽器

1. 概述
WEB的應(yīng)用已經(jīng)深入到現(xiàn)在社會(huì)的方方面面,作為一個(gè)軟件開發(fā)人員或其他技術(shù)人員,都有可能遇見在Internet上查詢大量的資料和信息的情況,一般來說用的最多的就是WEB的搜索Engine。當(dāng)我們使用它查出大量的資料鏈接后,還有可能遇到更多的鏈接,但要自己去看他們是否是鏈接,那確實(shí)是一件很麻煩的事情。這篇文章就是來講,如何用Delphi的MSHTML_TLB.pas來開發(fā)一個(gè)具有自動(dòng)查找Web頁面上所有鏈接的簡(jiǎn)單網(wǎng)絡(luò)瀏覽器。我是在IE5的環(huán)境下寫的這個(gè)程序,當(dāng)然它可以向下兼容,如IE4。
2.關(guān)于MSHTML_TLB.pas
MSHTML_TLB.pas是Deliphi里面自帶的一個(gè)類。它的含義是Microsoft HTML對(duì)象庫。它不能夠包含在所有的工程或程序中,原因是它實(shí)在是太大了,整個(gè)文件的代碼共有241,899l行,那么長。大小約有12M。下面我們來看看它是如何加入到程序中的。
1. 首先,我們打開Delphi,建立一個(gè)新的application。我把form1保存為MainFrm.pas,把a(bǔ)pplication保存為FindLinks.dPR.
2. 要想實(shí)現(xiàn)IE 的功能我們就必須要使用Microsoft HTML對(duì)象庫(MSHTML type library.)如何實(shí)現(xiàn)呢?如圖1, Project->Import Type Library:

然后你會(huì)看到關(guān)于"Microsoft HTML Object Library (Version 4.0)"的列表,如圖2。
接下來可能會(huì)遇到一些問題。比如,在列表里面沒有出現(xiàn)"Microsoft HTML Object Library (Version 4.0)"。這是為什么呢?那是IE的問題,由于IE版本的不同(我用的是IE5)。我建議最好是先查詢你的計(jì)算機(jī)里面有沒有mshtml.tlb這個(gè)文件。
在9x里面它是存在與C:\WINDOWS\SYSTEM目錄里面,在2000里面它在\WINNT\system32目錄里面。如果找到了這個(gè)文件,就可以用圖2的click on the "Add..." button,然后選擇mshtml.tlb,就可以了,如果沒有找到它,那說明你沒有安裝IE或你的IE版本太低,請(qǐng)升級(jí)IE。
最后,當(dāng)我們選擇了倒入的庫后,會(huì)等待一段時(shí)間,因?yàn)樗鼘?shí)在是太長了,不過請(qǐng)千萬不要因?yàn)槭撬罊C(jī)了。它會(huì)給自動(dòng)查找提供很多幫助。
3. 工程實(shí)現(xiàn)。
界面設(shè)計(jì)如下圖:


使用以下組件:
控件 命名 TEXT
TLabel lblURL 資料網(wǎng)址
TEdit edtURL http://www.
TButton btnFindLinks 查詢連接
TListBox lstbxLinks null

4. 程序設(shè)計(jì)
1. 在Form1的interface部分,在uses后面加入,OleCtrls, SHDocVw, and OleServer.這些所應(yīng)用的類,都是基于我們所要?jiǎng)?chuàng)建的TinternetExplorer的,它是IE的ActiveX的對(duì)象。但是這里還有其它的方式(TinternetExplorer)進(jìn)行,我們采用TwebBrowser 控制在我們的form1。
2. 我們?cè)趐rivate里面加入如下代碼:
FInternetExplorer: TInternetExplorer;
procedure WebBrowserDocumentComplete(Sender: TObject; var pDisp: OleVariant;
var URL: OleVariant);   
最后用Ctrl-Shift-C完成類的聲明。
3. 在impelmentation后面加入如下聲明:
uses MSHTML_TLB, ComObj;
要使用的類。
4. 在form1的OnCreate事件中加入如下:
   FInternetExplorer := TInternetExplorer.Create(Self);
  FInternetExplorer.OnDocumentComplete := WebBrowserDocumentComplete;
5. 最后在form1的TForm1.WebBrowserDocumentComplete里面加入如下代碼:
1. procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
2.   var pDisp: OleVariant; var URL: OleVariant);
3. var
4.  Doc: IHTMLDocument2;
5.  ElementCollection: IHTMLElementCollection;
6.  HtmlElement: IHTMLElement;
7.  I: Integer;
8.  AnchorString: string;
9. begin
10.  lstbxLinks.Clear;
11.  // 在處理網(wǎng)頁的時(shí)候發(fā)現(xiàn)它沒有完全下載,將不會(huì)進(jìn)行處理連接
12.   Doc := FInternetExplorer.Document as IHTMLDocument2;
13.  if Doc = nil then
14.   raise Exception.Create('Couldn''t convert the ' +
15.    'FInternetExplorer.Document to an IHTMLDocument2');
16.  // 奪取web上的所有元素。
17.  ElementCollection := Doc.all;
18.  for I := 0 to ElementCollection.length - 1 do
19.  begin
20.   file://得到當(dāng)前的元素
21.   HtmlElement := ElementCollection.item(I, '') as IHTMLElement;
22.   // 查找網(wǎng)頁原代碼中的LINK標(biāo)記。
23.   // 發(fā)現(xiàn)其它的html標(biāo)記 (例如: TABLE, FONT, etc.)
24.   if HTMLElement.tagName = 'A' then
25.   begin
26.    // 在詳細(xì)的link里面抓取innerText,innertext就是標(biāo)記中<href=后面的東西>例如:

27.    // 我們?cè)趙eb里面看見"西南民族學(xué)院"
28.    // <a href="http://www."><b>西南民族學(xué)院</b></a>.
29.      AnchorString := HtmlElement.innerText;
30.    if AnchorString = '' then
31.     AnchorString := '(Empty Name)';
32.    AnchorString := AnchorString + ' -  ' +
33.     (HtmlElement as IHTMLAnchorElement).href;
34.    lstbxLinks.Items.Add(AnchorString);
35.   end;
36.  end;
37. end;

  最后我們?cè)赽utton(btnFindLinks)加入Onclick 事件:
1. // 在被瀏覽的web里面進(jìn)行查詢連接。
2.  FInternetExplorer.Navigate(edtURL.Text, EmptyParam, EmptyParam,
   EmptyParam, EmptyParam);
從以上的程序里面我們可以看出它的原理了,實(shí)際上是很簡(jiǎn)單的,看過html原代碼的人都知道,使網(wǎng)頁產(chǎn)生連接的代碼就是:<a href="http://www."><b>西南民族學(xué)院</b></a>.
我程序的原理就是通過截取href后面的字符串,并在"""號(hào)后面截止。
然后把它保存為另外的字符串。然后通過TwebBrowser顯示出來。
最后讓我們來編譯這個(gè)程序,的卻,編譯它很費(fèi)時(shí)間,因?yàn)榫幾g多達(dá)241,899l行的MSHTML_TLB.pas,是一件很麻煩的事情。其中還包括多達(dá)20多個(gè)的warning錯(cuò)誤,但請(qǐng)放心這是MSHTML_TLB.pas的問題,與其它程序無關(guān)。這樣一個(gè)小型的查找Web頁面上所有鏈接的簡(jiǎn)單網(wǎng)絡(luò)瀏覽器就出現(xiàn)在我們面前。本程序在IE5.0和Delphi6下編譯通過。

0
點(diǎn)擊分享給好友

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多