VB操作IE瀏覽器完全控制

asword發表於2007-03-06
本文將一步步介紹如何透過VB呼叫IE的物件庫來對IE進行控制。
本文使用的程式設計工具是VB6英文企業版,瀏覽器是IE5,以下的程式碼只能在IE4及以上版本下執行。另外為了能深入瞭解程式程式碼,最好能安裝MSDN。文中的所有物件、函式、事件在其中都可以查到。[@more@]
相信現在絕大多數計算機上使用的是IE瀏覽器。如何透過程式設計控制IE的操作呢,

一、如何獲得Windows中所有開啟的瀏覽器視窗

首先開啟VB,建立一個新工程,點選選單 Projects | References 項,在Available References 列表中選擇

Microsoft Internet Controls項將Internet物件引用介入到工程中。新增一個ListBox到Form1,然後在Form1中添

加如下程式碼:

Dim dWinFolder As New ShellWindows


Private Sub Form_Load()

Dim objIE As Object


For Each objIE In dWinFolder

If InStr(1, objIE.FullName, "IEXPLORE.EXE", vbTextCompare) <> 0 Then

List1.AddItem objIE.LocationURL

End If

Next

End Sub

開啟幾個瀏覽器視窗,然後執行程式,可以看到所有瀏覽視窗中的URL地址都在List1中列了出來。

上面程式中的ShellWindows物件是描述當前所有開啟的“瀏覽視窗”物件集合的物件,利用For...Each語句可以

獲得其中所有的瀏覽視窗物件。這是一個WebBrowser物件,在MSDN索引中透過“WebBrowser Object”中可以找到該

物件的詳細介紹

在ShellWindows中的瀏覽視窗物件不僅包含IE,還包含Explore視窗(向資源管理器或者“我的電腦”視窗就是

Explore)。只不過它們的宿主程式一個是IEXPLORE.EXE,一個是EXPLORE.EXE。所以對每一個物件首先根據其FulName

屬性來判斷視窗是IE瀏覽器,如果是,則將該視窗的URL地址列出來。

透過WebBrowser物件可以獲得和設定瀏覽器視窗中的很多屬性,例如視窗大小、工具欄、狀態列狀態以及控制

視窗的瀏覽等,大家透過MSDN都可以查到。


二、如何得到每一個瀏覽視窗的內容

在上面程式的Form1中再新增一個TextBox控制元件,將MultiLine屬性設定為True,然後在List1的Click事件中新增如

下程式碼:

Dim objDoc As Object

Dim objIE As Object


For Each objIE In dWinFolder

If objIE.LocationURL = List1.List(List1.ListIndex) Then

Set objDoc = objIE.Document


For i = 1 To objDoc.All.length - 1

If objDoc.All(i).tagname = "BODY" Then

Text1.Text = objDoc.All(i).innerText

End If

Next

Exit For

End If

Next

執行程式,點選ListBox中的一個列表,所對應的瀏覽器視窗中的文字內容就會顯示在TextBox中。

在上面的程式中,首先根據ListBox中選擇的URL獲得Webrowser物件,然後根據Document屬性獲得文件物件。我們知道

一個頁面中包括HEAD、TITLE、BODY部分,頁面中還可能包括Applet、Script、連線、表單等,這些在文件中都是一個物件

在程式中就是迴圈文件物件下的所有物件,如果物件的名稱是“BODY”,說明物件代表HTML文件的正文部分,那麼訪問物件

的innerText屬性獲得文件正文。關於Document物件更詳細的資訊,大家可以參考MSDN中Webbrowser object幫助中的

Document屬性連線。


三、響應IE事件

上面的部分只是介紹瞭如何訪問Webbrowser物件的屬性,下面介紹如何監控IE事件。

在Form1中再新增一個CommandButton。在程式碼視窗的 [Gengeral]-[Declaration]新增下面的定義:

Dim WithEvents eventIE As WebBrowser_V1

這樣就在Form1中新新增了一個物件,然後在Command1的Click事件中新增如下程式碼:

Dim objIE As Object


For Each objIE In dWinFolder

If objIE.LocationURL = List1.List(List1.ListIndex) Then

Set eventIE = objIE

Command1.Enabled = False

Text1.Text = ""

Exit For

End If

Next

在eventIE的NavigateComplete事件中新增如下程式碼:

Text1.Text = Text1.Text + Chr(13) + Chr(10) + URL

在Form的UnLoad事件中新增下面一句程式碼:

Set dWinFolder = Nothing

執行程式,在ListBox中選擇一個URL後點選Command1,然後轉到與所選項向對應的瀏覽視窗輸入網站地址進行瀏覽,可以

看到所瀏覽過的站點地址在TextBox中一一列出。

上面的程式實現起來也很簡單。首先定義一個可響應事件的Webbrowser物件,然後將它與在ListBox中選擇的Webbrowser對

象聯絡起來,當瀏覽器發生變化時,eventIE物件就能響應相應的事件。

根據IE版本的不同,Webbrowser物件也不同,作者的瀏覽器是IE5.0,在上面將eventIE定義為WebBrowser_V1執行透過,如

果你的瀏覽器版本為4.0的話,可能在執行 Set eventIE = objIE 時,可能產生 Type mistake 錯誤,這時你可以嘗試將

eventIE定義為:Dim WithEvents eventIE As WebBrowser

--------------------------------------------------------------------------------

-- 作者:hongjuan
-- 釋出時間:2004-2-12 21:04:00

--
自己的IE——用VB製作瀏覽器


  程式的主角是一個ActiveX控制元件:WebBrowser。當然,預設狀態下VB的工具箱中並沒

有它,我們得手工加入,方法是:右擊工具箱,在出現的快捷選單中選擇“部件...”,

確保在彈出的對話方塊中選中“控制元件”標籤,找到Microsoft Internet Controls,在它前

面的小框中打鉤,然後確定。此時你會發現工具箱中多了兩個小圖示,其中,地球圖示代

表的控制元件正是我們需要的WebBrowser。

  由於許多人對WebBrowser控制元件不是很熟悉,VB的幫助中也沒有有關它的內容(反正

我沒有找到),因此有必要介紹一下它的屬性、方法和事件,限於篇幅,我們只涉及程

序中用到的:

  屬性:LocationURL 返回控制元件顯示WEB頁面的URL。

  方法:Navigate 轉移到指定的URL或開啟指定HTML檔案。

  事件:1.DownloadBegin 下載操作開時觸發。

  2.DownloadComplete 下載操作完成、終止或失敗時觸發。

  3.ProgressChange WebBrowser控制元件跟蹤下載操作的過程,並定期觸發此事件。

其語法為:Sub WebBrowser_ProgressChange (ByVal Progress As Long, ByVal

ProgressMax As Long)。Progress變元是當前已下載的資料總量,ProgressMax變元

是將要下載的資料總量。

  4.TitleChange 當前文件標題改變時觸發

  除了WebBrowser控制元件外,程式還需要一個Label控制元件:Label1;一個ComboBox控制元件:

combo1,用來顯示URL地址;一個StatusBar控制元件:StatusBar1;一個ProgressBar控制元件:

ProgressBar1,用來顯示下載進度(StatusBar控制元件和ProgressBar控制元件是ActiveX控制元件

Microsoft Windows Common Controls5.0的成員,加入工具箱的方法同WebBrowser控制元件),

這些控制元件的屬性值都用預設值。

  以下是程式清單:

  Option Explicit

  

  Private Sub Form_Load()

  Me.Caption =“My Explorer”

  Label1.Caption = “URL”

  Combo1.Text = “”

  Combo1.Top = Label1.Height

  Combo1.Left = 0

  WebBrowser1.Top = Combo1.Top + Combo1.Height

  WebBrowser1.Left = 0

  Form_Resize

  StatusBar1.Style = sbrSimple

  ProgressBar1.ZOrder

  End Sub

  

  Private Sub Form_Resize()

  On Error GoTo a

  Combo1.Width = Form1.Width - 100

  WebBrowser1.Width = Combo1.Width

  WebBrowser1.Height = Form1.Height - Combo1.Height - 1000

  ProgressBar1.Top = Me.Height - StatusBar1.Height - 330

  ProgressBar1.Left = 0.25 * StatusBar1.Width

  ProgressBar1.Width = 0.75 * Me.Width - 250

  a:

  End Sub

  

  Private Sub Combo1_Click()

  '轉到指定網址

  WebBrowser1.Navigate Combo1.Text

  End Sub

  

  Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)

  Dim i As Long

  Dim existed As Boolean

  If KeyCode = 13 Then

  If Left(Combo1.Text, 7) <> “http://”Then

  Combo1.Text = “http://”+ Combo1.Text

  End If

  WebBrowser1.Navigate Combo1.Text

  For i = 0 To Combo1.ListCount - 1

  If Combo1.List(i) = Combo1.Text Then

  existed = True

  Exit For

  Else

  existed = False

  End If

  Next

  If Not existed Then

  Combo1.AddItem (Combo1.Text)

  End If

  End If

  End Sub

  

  Private Sub WebBrowser1_DownloadBegin()

  '下載開始時狀態列顯示“Now Linking...”

  StatusBar1.SimpleText = “Now Linking...”

  End Sub

  

  Private Sub WebBrowser1_DownloadComplete()

  '下載完成時狀態列顯示“Link Finished”

  StatusBar1.SimpleText = “Link Finished”

  ProgressBar1.value = 0

  End Sub

  

  Private Sub WebBrowser1_ProgressChange(ByVal Progress As Long,

ByVal ProgressMax As Long)

  '下載進行時進度條變化

  If ProgressMax = 0 Then Exit Sub

  ProgressBar1.Max = ProgressMax

  If Progress <> -1 And Progress <= ProgressMax Then

  ProgressBar1.value = Progress

  End If

  End Sub

  

  Private Sub WebBrowser1_TitleChange(ByVal Text As String)

  Combo1.Text = WebBrowser1.LocationURL

  End Sub
Dim dWinFolder As New ShellWindows 'IE視窗
需要打後再使用此函式
private sub Getbody()
Dim objDoc As Object
Dim objIE As Object
For Each objIE In dWinFolder
If objIE.LocationURL = "" Then
Set objDoc = objIE.Document
For i = 1 To objDoc.All.Length - 1
If objDoc.All(i).tagname = "BODY" Then
Text1(0).Text = objDoc.All(i).innerText
End If

Next
end if
next
End Sub

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/82387/viewspace-902983/,如需轉載,請註明出處,否則將追究法律責任。

相關文章