整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          實戰(zhàn)VBA技術(shù)也能實現(xiàn)網(wǎng)頁瀏覽器

          實戰(zhàn)VBA技術(shù)也能實現(xiàn)網(wǎng)頁瀏覽器

          家好,上期的視頻可能各位已經(jīng)看了,感覺代碼截圖還是有點多,今天我以文章的形式將界面設(shè)計及其事件行為代碼全部呈現(xiàn)給大家吧!

          一、界面設(shè)計

          (一)前端界面設(shè)計

          圖1 前端插入一個命令按鈕

          給這個按鈕添加代碼截圖

          圖2 前端命令按鈕代碼

          (二)后臺窗體界面設(shè)計

          1、窗體設(shè)計

          圖3 窗體

          2、在窗體上添加轉(zhuǎn)到按鈕Go

          圖4 命令按鈕Go

          3、在窗體上添加主頁按鈕Home

          圖5 命令按鈕Home

          4、在窗體上添加后退按鈕Back

          圖6 命令按鈕Back

          5、在窗體上添加前進按鈕Forward

          圖7 命令按鈕Forward

          6、在窗體上添加刷新按鈕Refresh

          圖8 命令按鈕Refresh

          7、在窗體上添加停止按鈕Stop

          圖9 命令按鈕Stop

          8、在窗體上添加空白頁按鈕About:Blank

          圖10 命令按鈕About:Blank

          9、在窗體上添加網(wǎng)頁html源代碼顯示按鈕WebPagesHtmlSourceCode

          圖11 命令按鈕WebPagesHtmlSourceCode

          10、在窗體上添加圖片控件Image1

          圖12圖片控件Image1

          11、在窗體上添加瀏覽器控件WebBrowser1

          圖13瀏覽器控件WebBrowser1

          12、在窗體上添加狀態(tài)欄控件StatusBar1

          圖14狀態(tài)欄控件StatusBar1

          二、功能代碼實現(xiàn)

          (一)模塊1代碼:

          '在模塊中聲明私有變量ActiveTB變量為窗體MSForms中的文本框類型的

          Private ActiveTB As MSForms.TextBox

          'CreateShortCutMenu過程用來創(chuàng)建標(biāo)題為"ShortCut"的右鍵快捷菜單,并添加4個菜單項

          Public Sub CreateShortCutMenu()

          Dim ShortCutMenu As CommandBar '定義ShortCutMenu快捷菜單變量為CommandBar命令欄類型

          Dim ShortCutMenuItem As CommandBarButton '定義ShortCutMenuItem快捷菜單項變量

          '為CommandBarButton命令欄按鈕類型

          Dim sCaption As Variant '定義sCaption菜單項標(biāo)題變量為Variant可變類型(數(shù)組)

          Dim iFaceId As Variant '定義iFaceId菜單項皮膚ID變量為Variant可變類型(數(shù)組)

          Dim sAction As Variant '定義sAction菜單項動作名稱變量為Variant可變類型(數(shù)組)

          Dim i As Integer

          '以下是初始化菜單項的屬性數(shù)組sCaption、iFaceId、sAction

          sCaption=Array("剪切(&C)", "復(fù)制(&T)", "貼粘(&P)", "刪除(&D)")

          iFaceId=Array(21, 19, 22, 1786)

          sAction=Array("Action_Cut", "Action_Copy", "Action_Paste", "Action_Delete")

          On Error Resume Next '遇到錯誤,則繼續(xù)喚醒執(zhí)行下一條語句

          Application.CommandBars("ShortCut").Delete

          Set ShortCutMenu=Application.CommandBars.Add("ShortCut", msoBarPopup)

          With ShortCutMenu '對4個菜項單分別賦予屬性:標(biāo)題、皮膚ID、行為(動作)

          For i=0 To 3

          '設(shè)置快捷菜單項為控件類Controls的添加Add控件按鈕msoControlButton事件

          Set ShortCutMenuItem=.Controls.Add(msoControlButton)

          With ShortCutMenuItem '4個菜項單分別賦予屬性:標(biāo)題、皮膚ID、行為(動作)

          .Caption=sCaption(i)

          .FaceId=Val(iFaceId(i))

          .OnAction=sAction(i)

          End With

          Next

          End With

          End Sub

          'ShowPopupMenu過程是根據(jù)文本框中字符的選中狀態(tài)設(shè)置右鍵

          '快捷菜單項的Enabled屬性后使用ShowPopup方法顯示右鍵快捷菜單

          Public Sub ShowPopupMenu(txtCtr As MSForms.TextBox) 'txtCtr為窗體的文本控件類型

          Set ActiveTB=txtCtr '用ActiveTB指向文本框?qū)ο髏xtCtr

          With Application.CommandBars("ShortCut")

          .Controls(1).Enabled=txtCtr.SelLength > 0 '如果當(dāng)前文本框中已有選中的字符則"剪切"按鈕有效

          .Controls(2).Enabled=.Controls(1).Enabled '如果當(dāng)前文本框中已有選中的字符則"復(fù)制"按鈕有效

          .Controls(3).Enabled=txtCtr.CanPaste '如果剪貼板中包含對象支持的數(shù)據(jù)。則"貼粘"按鈕有效

          .Controls(4).Enabled=.Controls(1).Enabled '如果當(dāng)前文本框中已有選中的字符則"刪除"按鈕有效

          .ShowPopup '顯示快捷菜單

          End With

          End Sub

          '是快捷菜單中單擊"剪切"菜單項所運行的過程。使用Cut 方法將當(dāng)前選中的文本框中的文本刪除并移至剪貼板

          Public Sub Action_Cut()

          ActiveTB.Cut

          End Sub

          '是快捷菜單中單擊"復(fù)制"菜單項所運行的過程。使用Copy方法將文本框選中的文本復(fù)制到剪貼板上

          Public Sub Action_Copy()

          ActiveTB.Copy

          End Sub

          '是快捷菜單中單擊"貼粘"菜單項所運行的過程。使用Paste方法把剪貼板上的內(nèi)容傳送到一個文本框中

          Public Sub Action_Paste()

          ActiveTB.Paste

          End Sub

          '是快捷菜單中單擊"貼粘"菜單項所運行的過程。使用Replace函數(shù)將文本框中選中的文本的文本替換成空字符

          Public Sub Action_Delete()

          Dim s As String

          With ActiveTB

          s=.SelText

          .Value=Replace(.Value, s, "")

          End With

          End Sub

          '刪除創(chuàng)建的右鍵快捷菜單

          Public Sub DeleteShortCutMenu()

          On Error Resume Next

          Application.CommandBars("ShortCut").Delete

          End Sub

          (二)窗體代碼:

          '定義strURL為公有的網(wǎng)址變量用于中間傳遞網(wǎng)址,s為保存訪問當(dāng)前網(wǎng)頁源代碼字符串變量

          '另外定義firstURL, lastURL, URL_Array(500)是網(wǎng)頁首址、尾址,地址數(shù)組

          Dim strURL, s, firstURL, lastURL, URL_Array(500) As String

          Dim clc_URL As New Collection '定義clc_URL為地址集合(具有地址重復(fù)的排他性,即不重復(fù))

          Dim i As Integer '定義i為地址數(shù)組URL_Array( )元素下標(biāo),可以在任意過程中使用

          '以下是恢復(fù)VBA窗體應(yīng)有的最小化、最大化按鈕

          Option Explicit

          Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

          Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

          Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

          Private Const GWL_STYLE=(-16)

          Private Const WS_THICKFRAME As Long=&H40000 '(恢復(fù)大小)

          Private Const WS_MINIMIZEBOX As Long=&H20000 '(最小化)

          Private Const WS_MAXIMIZEBOX As Long=&H10000 '(最大化)

          Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

          Private Const WM_SYSCOMMAND=&H112

          Private Const SC_MAXIMIZE=&HF030&

          Private Sub UserForm_Initialize()

          Call userform1_max_min_Btn_display '重構(gòu)窗體的最大化最小化按鈕顯示

          WebBrowser1.Silent=True '避免出現(xiàn)腳本錯誤,設(shè)置瀏覽器控件為安靜狀態(tài)Silent=True

          i=0 '初始化地址數(shù)組URL_Array( )下標(biāo)為0

          'TextBox1.SetFocus '窗體初始化時可設(shè)地址欄輸入框TextBox1為起始輸入焦點,即光標(biāo)初始出現(xiàn)在地址欄輸入框TextBox1

          End Sub

          '窗體尺寸改變事件

          Private Sub UserForm_Resize() '文本框、瀏覽器視圖區(qū)隨窗體變化而變化

          TextBox1.Width=UserForm1.Width - TextBox1.Left - 60

          GoBtn.Left=TextBox1.Left + TextBox1.Width + 4

          If UserForm1.Height - WebBrowser1.Top - 50 < 0 Then '若窗體最小化導(dǎo)致

          WebBrowser1.Height=0 '致UserForm1.Height - WebBrowser1.Top - 50 < 0

          '則重置瀏覽器控件高度WebBrowser1.Height為0

          Else '否則按照正常的尺寸跟隨改變

          WebBrowser1.Width=UserForm1.Width - WebBrowser1.Left - 20

          WebBrowser1.Height=UserForm1.Height - WebBrowser1.Top - 50

          End If

          '構(gòu)筑圖形Image1作為WebBrowser1的邊框背景,設(shè)置其Left、Top、Width、Height屬性跟隨WebBrowser1變化

          Image1.Left=WebBrowser1.Left - 2

          Image1.Top=WebBrowser1.Top - 2

          Image1.Width=WebBrowser1.Width + 5

          Image1.Height=WebBrowser1.Height + 5

          '構(gòu)筑狀態(tài)欄StatusBar1,設(shè)置其屬性,其中Panels(1)是第一個面板

          StatusBar1.Top=WebBrowser1.Top + WebBrowser1.Height + 3

          StatusBar1.Width=WebBrowser1.Width

          StatusBar1.Panels(1).Width=StatusBar1.Width - 2

          End Sub

          '以下是當(dāng)TextBox1輸入內(nèi)容完成回車離開后將剛才輸入的內(nèi)容傳送到瀏覽器控件

          Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

          WebBrowser1.Navigate (TextBox1.Text) '瀏覽器導(dǎo)航網(wǎng)址進入頁面

          If TextBox1.Text="" Then

          BackBtn.Enabled=False

          ForwardBtn.Enabled=False

          Else

          BackBtn.Enabled=True

          ForwardBtn.Enabled=True

          End If

          s=""

          End Sub

          '文本框的右鍵菜單事件

          Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

          Call CreateShortCutMenu '動態(tài)創(chuàng)建快捷菜單

          '若點擊了鼠標(biāo)上面的第2個鍵即右鍵

          If Button=2 Then ShowPopupMenu ActiveControl '若點擊鼠標(biāo)右鍵(即第2鍵),調(diào)用過程

          'ShowPopupMenu ActiveControl顯示彈出的

          '快捷菜單,其中ActiveControl為活動控件

          End Sub

          Private Sub GoBtn_Click() 'Go轉(zhuǎn)向按鈕的的轉(zhuǎn)向事件

          WebBrowser1.Navigate (TextBox1.Text) '瀏覽器導(dǎo)航網(wǎng)址進入頁面

          If TextBox1.Text="" Then

          BackBtn.Enabled=False

          ForwardBtn.Enabled=False

          Else

          BackBtn.Enabled=True

          ForwardBtn.Enabled=True

          End If

          s=""

          End Sub

          '頁面標(biāo)題進行動態(tài)修改窗體標(biāo)題過程

          Sub Page_Title()

          Dim start_pos, end_pos As Integer

          Dim title As String

          If TextBox1.Value <> "" And TextBox1.Value <> "about:blank" Then '若地址收入欄非空且也不為空白頁

          s="" '當(dāng)點擊源碼查看按鈕WebPagesHtmlSourceCodeBtn時,s源碼字符串置空

          's獲取最新訪問的網(wǎng)頁的源碼(用WebBrowser1.Document.DocumentElement.innerHTML輕易實現(xiàn))

          s=s & WebBrowser1.Document.DocumentElement.innerHTML

          s=UCase(s) '將s中的小寫字符統(tǒng)統(tǒng)變?yōu)榇髮懀@里用了UCase(s)函數(shù)

          start_pos=Val(InStr(s, "<TITLE>")) + 7

          end_pos=Val(InStr(s, "</TITLE>"))

          title=Mid(s, start_pos, end_pos - start_pos)

          UserForm1.Caption="WebBrowser-" & title

          Else

          UserForm1.Caption="WebBrowser"

          End If

          End Sub

          '當(dāng)新網(wǎng)頁文檔內(nèi)容完全加載完時,調(diào)用頁面標(biāo)題進行動態(tài)修改窗體標(biāo)題事件

          Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)

          Call Page_Title '網(wǎng)頁文檔加載完后調(diào)用網(wǎng)頁標(biāo)題去修改窗體標(biāo)題功能

          Call userform1_max_min_Btn_display '恢復(fù)最大化、最小化按鈕顯示

          End Sub

          '瀏覽器控件在新導(dǎo)航NavigateComplete2頁面完成后觸發(fā)的事件

          Private Sub WebBrowser1_NavigateComplete2(ByVal pDisp As Object, URL As Variant)

          '以下是將新頁面的網(wǎng)址送達文本框TextBox1

          TextBox1.Value=WebBrowser1.LocationURL

          '狀態(tài)欄第一個面板StatusBar1.Panels(1)同步獲取網(wǎng)址信息

          StatusBar1.Panels(1).Text=WebBrowser1.LocationURL

          Dim X As String

          On Error Resume Next

          X=TextBox1.Value

          clc_URL.Add X, CStr(X) '新導(dǎo)航網(wǎng)址后,將新導(dǎo)航的網(wǎng)頁地址存入集合clc_URL

          If Err=0 Then '若果錯誤為0即不重復(fù)

          URL_Array(i)=X '將不重復(fù)的地址傳送到地址素組URL_Array( ),且下面進行i遞增1

          i=i + 1

          End If

          Err.Clear '若有錯,則清除錯誤

          On Error GoTo 0

          BackBtn.Enabled=True

          ForwardBtn.Enabled=True

          End Sub

          '瀏覽器控件當(dāng)準(zhǔn)備產(chǎn)生新窗口時

          Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)

          Cancel=True '終止在新窗口產(chǎn)生網(wǎng)頁為真

          WebBrowser1.Navigate strURL '瀏覽器控件網(wǎng)址導(dǎo)航網(wǎng)址為中間傳遞的網(wǎng)址變量strURL

          s="" '當(dāng)新網(wǎng)頁欲想在新窗口中呈現(xiàn)時,重新先將s置空

          End Sub

          '瀏覽器控件狀態(tài)文本改變時(即 活動網(wǎng)頁中點擊了的文本--超鏈接對象),將超鏈接的文本鏈接信息Text傳遞到

          '中間傳遞的網(wǎng)址變量strURL

          Private Sub WebBrowser1_StatusTextChange(ByVal Text As String)

          strURL=Text

          End Sub

          Private Sub HomeBtn_Click() '回到主頁

          WebBrowser1.GoHome

          End Sub

          Private Sub BackBtn_Click() '頁面后退

          firstURL=URL_Array(0) '獲取地址數(shù)組存放網(wǎng)頁的首址

          '若地址欄為空,或者地址欄為空白,或者地址欄是網(wǎng)頁的首址

          If TextBox1.Value="" Or TextBox1.Value="about:blank" Or TextBox1.Value=firstURL Then

          MsgBox "No site display or arrived at first site address!"

          BackBtn.Enabled=False

          Else

          WebBrowser1.GoBack

          ForwardBtn.Enabled=True

          End If

          End Sub

          Private Sub ForwardBtn_Click() '頁面前進

          If TextBox1.Value="" Then

          lastURL=URL_Array(0)

          MsgBox "No site display or arrived at last site address!!"

          ForwardBtn.Enabled=False

          Else

          lastURL=URL_Array(clc_URL.Count - 1) '獲取地址數(shù)組存放網(wǎng)頁跳轉(zhuǎn)的當(dāng)前尾址

          '若地址欄為空白,或者地址欄是網(wǎng)頁跳轉(zhuǎn)的最終當(dāng)前尾址

          If TextBox1.Value="about:blank" Or TextBox1.Value=lastURL Then

          MsgBox "No site display or arrived at last site address!!"

          ForwardBtn.Enabled=False

          Else

          WebBrowser1.GoForward

          BackBtn.Enabled=True

          End If

          End If

          End Sub

          Private Sub RefreshBtn_Click() '刷新頁面

          If TextBox1.Value="" Then '如果地址欄輸入框TextBox1為空

          BackBtn.Enabled=True '則恢復(fù)后退BackBtn、前進ForwardBtn按鈕可用,且不刷新頁面

          ForwardBtn.Enabled=True

          Else '否則,刷新頁面,并且調(diào)用過程Page_Title更改窗體標(biāo)題

          WebBrowser1.Refresh

          Call Page_Title '刷新后調(diào)用網(wǎng)頁標(biāo)題去修改窗體標(biāo)題功能

          Call userform1_max_min_Btn_display '恢復(fù)最大化、最小化按鈕顯示

          End If

          End Sub

          Private Sub StopBtn_Click() '頁面停止

          WebBrowser1.Stop

          End Sub

          '以下是窗體上相對瀏覽器控件WebBrowser1的幾個控制按鈕的事件

          Private Sub About_Blank_Btn_Click() '設(shè)置空白頁

          WebBrowser1.Navigate "about:blank"

          End Sub

          Private Sub WebPagesHtmlSourceCodeBtn_Click() '查看訪問當(dāng)前網(wǎng)頁的HTML源碼

          If TextBox1.Value <> "" Then '若地址收入欄非空

          s="" '當(dāng)點擊源碼查看按鈕WebPagesHtmlSourceCodeBtn時,s源碼字符串置空

          's獲取最新訪問的網(wǎng)頁的源碼(用WebBrowser1.Document.DocumentElement.innerHTML輕易實現(xiàn))

          s=s & WebBrowser1.Document.DocumentElement.innerHTML

          Else

          s="No Web Pages!"

          End If

          MsgBox s

          End Sub

          Sub userform1_max_min_Btn_display() '窗體的最大化最小化按鈕顯示

          Dim hWndForm As Long

          Dim IStyle As Long

          hWndForm=FindWindow("ThunderDFrame", Me.Caption)

          IStyle=GetWindowLong(hWndForm, GWL_STYLE)

          IStyle=IStyle Or WS_THICKFRAME '還原

          IStyle=IStyle Or WS_MINIMIZEBOX '最小化

          IStyle=IStyle Or WS_MAXIMIZEBOX '最大化

          SetWindowLong hWndForm, GWL_STYLE, IStyle

          PostMessage hWndForm, WM_SYSCOMMAND, SC_MAXIMIZE, 0 '使其窗口最大化

          End Sub

          三、瀏覽器運行測試效果截圖

          (一)在瀏覽器地址欄輸入電子科技大學(xué)網(wǎng)址

          圖15 電子科大主頁面

          (二)電子科技大學(xué)歷史頁面

          圖16 電子科大歷史介紹

          (三)瀏覽器地址欄輸入成都農(nóng)業(yè)科技職業(yè)學(xué)院網(wǎng)址的頁面

          圖17 成農(nóng)院主頁

          (四)點擊成都農(nóng)業(yè)科技職業(yè)學(xué)院站群導(dǎo)航準(zhǔn)備進入信息技術(shù)分院

          圖18 成農(nóng)院站群到導(dǎo)航

          (五)點擊成都農(nóng)業(yè)科技職業(yè)學(xué)院站群導(dǎo)航進入信息技術(shù)分院

          圖19 成農(nóng)院信息分院頁面

          (六)點擊Home按鈕回到瀏覽器空白主頁

          圖20 回到空白主頁

          好了,我終于分享給大家了全部的設(shè)計過程,各位可以可圈可點,可以在這個基礎(chǔ)上進行改進開發(fā),比如設(shè)計選項卡式的面板、站點收藏、歷史紀(jì)錄等等功能。

          最后,還是感謝大家的關(guān)注(頭條號“跟我學(xué)office高級辦公”)和點評哦!

          +

          ebBrowser控件是Internet Explorer的主窗口,它是作為一個ActiveX控件來包裝的。用戶可以使用WebBrowser控件打開任何IE能夠顯示的Web頁面,并提取頁面數(shù)據(jù)。如有自己的網(wǎng)站,可運用WebBrowser控件實現(xiàn)EXCEL文檔和服務(wù)器間數(shù)據(jù)交換

          WebBrowser控件是作為一個ActiveX控件來包裝的,通常運用在VBA標(biāo)準(zhǔn)控件可滿足大多數(shù)應(yīng)用程序的需求,為了進一步擴展VBA功能,可在應(yīng)用程序中使用ActiveX控件。ActiveX控件是為用戶進行程序設(shè)計所定制的可重用對象,可以極大地擴展VBA的使用范圍。

          1、添加WebBrowser控件到工具箱

          ActiveX控件是可選控件,它可以被添加到【工具箱】中并在窗體中使用。在默認(rèn)情況下,【工具箱】將只顯示標(biāo)準(zhǔn)控件,向【工具箱】添加WebBrowser控件的步驟如下:

          • 第一步、鼠標(biāo)右擊【工具箱】空白處,彈出下面的菜單如圖:

          • 第二步、單擊【附加控件】菜單,打開【附加控件】對話框如圖:

          • 第三步、下拉滾動條,在【可用控件】列表中單擊所需的ActiveX控件,如Microsoft Web Browser瀏覽器控件,【工具箱】中顯示該控件如圖:

          2、WebBrowser控件常用屬性、事件和方法

          I、WebBrowser控件常用屬性

          • Application:返回WebBrowser控件的自動化對象;
          • MaxLength:設(shè)置文字框中能夠輸入字符的最大數(shù)量。默認(rèn)為0,表示輸入字符沒有數(shù)量限制;
          • MultiLine:設(shè)置文字框能否接受和顯示多行文本。屬性值為True顯示多行文本,F(xiàn)alse只容納單行文本;
          • PasswordChar:導(dǎo)航發(fā)生前激發(fā),刷新時不激發(fā);
          • ScrollBars:設(shè)置文字框是否有垂直或水平滾動條;
          • Text:設(shè)置或返回文字框中內(nèi)容,與Value屬性相同。

          II、WebBrowser控件常用事件

          • DocumentComplete:當(dāng)整個文檔完成時激發(fā),刷新頁面不激發(fā);
          • DownloadBegin:當(dāng)某項下載操作已經(jīng)開始后激發(fā),刷新也可激發(fā)此事件;
          • DownloadComplete:當(dāng)某項下載操作已經(jīng)完成后激發(fā),刷新也可激發(fā)此事件;
          • BeforeNavigate2:導(dǎo)航發(fā)生前激發(fā),刷新時不激發(fā);
          • NavigateComplete2:導(dǎo)航完成后激發(fā),刷新時不激發(fā)。

          III、WebBrowser控件常用方法

          • GoBack:相當(dāng)于IE的【后退】按鈕,使你在當(dāng)前歷史列表中后退一項;
          • GoForward:相當(dāng)于IE的【前進】按鈕,使你在當(dāng)前歷史列表中前進一項;
          • GoHome:相當(dāng)于IE的“ 主頁 ”按鈕,連接用戶默認(rèn)的主頁;
          • Navigate:連接到指定的URL;
          • Refresh:刷新當(dāng)前頁面。

          3、WebBrowser控件動態(tài)建立網(wǎng)頁

          如前所述,工具箱中添加WebBrowser控件后,將其拖入窗體并設(shè)置適當(dāng)尺寸,如圖:

          在窗體Initialize事件編寫代碼如下:

          Private Sub UserForm_Initialize()
          WebBrowser1.Navigate ("about:blank")
          WebBrowser1.Document.Clear
          WebBrowser1.Document.Open
          WebBrowser1.Document.write ("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>")
          WebBrowser1.Document.write ("<html>")
          WebBrowser1.Document.write ("<head>")
          WebBrowser1.Document.write ("<title>WebBrowser控件建立動態(tài)網(wǎng)頁</title>")
          WebBrowser1.Document.write ("<meta charset='utf-8'/>")
          WebBrowser1.Document.write ("<style>")
          WebBrowser1.Document.write ("</style>")
          WebBrowser1.Document.write ("<script type='text/javascript'>")
          WebBrowser1.Document.write ("</script>")
          WebBrowser1.Document.write ("</head>")
          WebBrowser1.Document.write ("<body scroll='no' bgcolor='#E3F3F9' style='border:none;'>")
          WebBrowser1.Document.write ("<form name='myFc'>")
          WebBrowser1.Document.write ("<table>")
          WebBrowser1.Document.write ("<tr><th colspan=2 style='text-align:left; font-size:10pt; color:#a51020;'>1、文本框</th></tr>")
          WebBrowser1.Document.write ("<tr><td>  姓名:</td><td>")
          WebBrowser1.Document.write ("<input id='myName' style='width:100px; color:#ff0000;' value='張三'/></td></tr>")
          WebBrowser1.Document.write ("<tr><th colspan=2 style='text-align:left; font-size:10pt; color:#e51020;'>2、單選按鈕</th></tr>")
          WebBrowser1.Document.write ("<tr><td>  性別:</td><td>")
          WebBrowser1.Document.write ("<input type='radio' name='myGender' value='1' checked/>男 ")
          WebBrowser1.Document.write ("<input type='radio' name='myGender' value='0'/>女</td></tr>")
          WebBrowser1.Document.write ("<tr><td>  簡介:</td><td>")
          WebBrowser1.Document.write ("<textarea id='myIntroduction' style='width:360px; height:160px; color:#555555;'>")
          WebBrowser1.Document.write ("WebBrowser控件是Internet Explorer的主窗口,它是作為一個ActiveX控件來包裝的。")
          WebBrowser1.Document.write ("用戶可以使用WebBrowser控件打開任何IE能夠顯示的Web頁面,")
          WebBrowser1.Document.write ("并提取頁面數(shù)據(jù)?如有自己的網(wǎng)站,可運用WebBrowser控件實現(xiàn)EXCEL文檔和服務(wù)器間數(shù)據(jù)交換")
          WebBrowser1.Document.write ("</textarea></td></tr>")
          WebBrowser1.Document.write ("</table>")
          WebBrowser1.Document.write ("</form>")
          WebBrowser1.Document.write ("</body>")
          WebBrowser1.Document.write ("</html>")
          WebBrowser1.Document.Close
          End Sub

          注:窗體中添加WebBrowser控件,在窗體初始化事件Initialize中編寫代碼,主要通過WebBrowser控件write方法將HTML文檔寫入空白文檔

          窗體運行效果如圖:

          4、WebBrowser控件獲取網(wǎng)頁信息

          WebBrowser控件和網(wǎng)頁交互使用需要一定程度的網(wǎng)頁編程技術(shù),網(wǎng)頁基本框架由超文本標(biāo)記語言(Hyper Text Markup Language,HTML)搭建,網(wǎng)頁外觀由層疊樣式表(Cascading Style Sheets,CSS)和一些HTML標(biāo)簽屬性來修飾完成,網(wǎng)頁動態(tài)效果通常使用JavaScript腳本語言來實現(xiàn)。HTML、CSS和JavaScript(JS)技術(shù)構(gòu)成客戶端(前端)網(wǎng)頁編程三大基礎(chǔ),運用WebBrowser控件和網(wǎng)頁交換需要掌握HTML、CSS和JS基本知識。

          如果有自己的網(wǎng)站,具備服務(wù)器端(后端)編程技能,還可以通過WebBrowser控件專門制作和EXCEL對接的網(wǎng)頁,從而將強的的網(wǎng)頁功能導(dǎo)入EXCEL中。

          運用WebBrowser控件和網(wǎng)頁交換需要了解網(wǎng)頁文檔結(jié)構(gòu)和內(nèi)容,如網(wǎng)頁excelVBA.html文檔如下:

          【HTML文檔(http://www.galaxystatistics.com/excel/excelVBA.html)】

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <title>Excel Train
          <meta charset="utf-8"/>
          <style></style>
           <script type="text/javascript">
          function oSum(x,y) {return x+y;}
          //無參數(shù)調(diào)用  
          function alertNull(){alert("WebBrowser call!");  }
          //有參數(shù)調(diào)用  
          function callWithPar(name, address) {  
          alert("Name is " + name + "; address is " + address);  
          }  
          </script>
          </head>
          <body scroll="yes" bgcolor="#E3F3F9" style="border:none">
          <form name="myFc">
          <table>
          <tr><th colspan=2 style="text-align:left; font-size:10pt; color:#a51020;">1、文本框</th></tr>
          <tr><td>  姓名:</td>
          <td><input id="myName" style="width:100px; color:#ff0000;" value="張三"/></td></tr>
          <tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">2、單選按鈕</th></tr>
          <tr><td>  性別:</td><td>
          <input type="radio" name="myGender" value="1" checked/>男 
          <input type="radio" name="myGender" value="0"/>女</td></tr>
          <tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">3、復(fù)選框</th></tr>
          <tr><td>  愛好:</td><td>
          <input type="checkbox" name="myLike" value="1"/>籃球 
          <input type="checkbox" name="myLike" value="2"/>游泳 
          <input type="checkbox" name="myLike" value="3"/>跑步</td></tr>
          <tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">4、下拉列表</th></tr>
          <tr><td>  專業(yè):</td><td><select id="myMajor">
              <option value="1">數(shù)學(xué)</option>
              <option value="2">統(tǒng)計學(xué)</option>
              <ption value="3">壽險精算</option>
              <option value="4">R語言</option>
          </select></td></tr>
          <tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">5、多行文本</th></tr>
          <tr><td>  簡介:</td><td>
          <textarea id="myIntroduction" style="width:300px; height:100px; color:#555555;">
          WebBrowser控件是Internet Explorer的主窗口,它是作為一個ActiveX控件來包裝的。
          用戶可以使用WebBrowser控件打開任何IE能夠顯示的Web頁面,并提取頁面數(shù)據(jù)。
          如有自己的網(wǎng)站,可運用WebBrowser控件實現(xiàn)EXCEL文檔和服務(wù)器間數(shù)據(jù)交換
          </textarea></td></tr>
          <tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">6、DIV區(qū)塊</th></tr>
          <tr><td>  效果:</td><td>
          <div id="myEffect" style="width:300px; height:50px; border:#aaaaaa 1px solid; dsiplay:inline;">
          <b style="text-align:center; width:100%; padding-top:15px;">這是黑體效果</b>
          </div></td></tr>
          <tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">7、圖片</th></tr>
          <tr><td>  頭像:</td><td>
          <img src="http://studio.galaxystatistics.com/shiny/rSHIndex/pic/vba1.jpg" id="myImg" style="width:200px; height:260px; color:#ff0000;"/>
          </td></tr>
          <tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">8、內(nèi)崁iFrame框架</th></tr>
          <tr><td>  框架:</td>
          <td><iframe src="http://www.galaxystatistics.com/excel/excelVBA1.html" id="myIframe" style="width:380px; height:260px; color:#ff0000;"/></td></tr>
          </table>
          </form>
          </body>
          </html>

          網(wǎng)頁excelVBA.html涉及HTML文檔的常用標(biāo)簽,通過WebBrowser控件和指定網(wǎng)頁互動包括獲取或設(shè)置網(wǎng)頁標(biāo)簽的值(文本)或?qū)傩灾担{(diào)用網(wǎng)頁JS函數(shù)等"。

          通常在EXCEL VBA中通過WebBrowser控件打開網(wǎng)頁時,窗體中的WebBrowser控件顯示網(wǎng)頁時會有立體邊框出現(xiàn)。為了去除這一邊框,可在網(wǎng)頁復(fù)制開始第1行定義文檔類型代碼,同時復(fù)制在25行的BODY標(biāo)簽屬性style="border:none"。

          根據(jù)網(wǎng)頁excelVBA.html內(nèi)容,在窗體【獲取網(wǎng)頁信息】命令按鈕的Click事件中輸入如下代碼:

          Private Sub CommandButton1_Click()
          Dim doc As Object
          Dim id As Integer
          '打開指定網(wǎng)頁
          WebBrowser1.Navigate "http://www.galaxystatistics.com/excel/excelVBA.html"
          Set doc=WebBrowser1.Document
          MsgBox "文本框信息:" & doc.getElementById("myName").Value
          MsgBox "單選按鈕數(shù)量:" & doc.getElementById("myFc").myGender.Length
          MsgBox "單選按鈕選項value屬性:" & doc.getElementById("myFc").myGender(0).Value
          MsgBox "單選按鈕選項checked屬性:" & doc.getElementById("myFc").myGender(0).Checked
          MsgBox "復(fù)選框數(shù)量:" & doc.getElementById("myFc").myLike.Length
          MsgBox "復(fù)選框選項value屬性:" & doc.getElementById("myFc").myLike(0).Value
          MsgBox "復(fù)選框選項checked屬性:" & doc.getElementById("myFc").myLike(0).Checked
          MsgBox "下拉列表數(shù)量:" & doc.getElementById("myMajor").Options.Length
          MsgBox "下拉列表索引:" & doc.getElementById("myMajor").selectedIndex
          id=doc.getElementById("myMajor").selectedIndex
          MsgBox "下拉列表選中文本:" & doc.getElementById("myMajor").Options(id).Text
          MsgBox "下拉列表選中值:" & doc.getElementById("myMajor").Options(id).Value
          MsgBox "多行文本內(nèi)容:" & doc.getElementById("myIntroduction").Value
          MsgBox "DIV區(qū)塊文本:" & doc.getElementById("myEffect").innerText
          MsgBox "DIV區(qū)塊HTML:" & doc.getElementById("myEffect").innerHTML
          MsgBox "圖片路徑:" & doc.getElementById("myImg").getAttribute("SRC")
          MsgBox "圖片寬度:" & doc.getElementById("myImg").Style.Width
          Dim doc1 As Object
          Set doc1=WebBrowser1.Document.getElementById("myIframe").Document    '設(shè)置框架文檔對象
          MsgBox "框架文本框信息:" & doc1.getElementById("myName").Value
          End Sub

          注:代碼中設(shè)置網(wǎng)頁文本對象為doc,對于網(wǎng)頁標(biāo)簽內(nèi)容的提取基本按DOM文檔結(jié)構(gòu)解析。

          運行窗體,點擊【獲取網(wǎng)頁信息】命令按鈕,結(jié)果如下圖:

          在VBA環(huán)境中通過WebBrowser控件提取網(wǎng)頁信息,通常將代碼編寫在WebBrowser控件的DocumentComplete事件中,即當(dāng)整個文檔完成時觸發(fā)該事件,這時網(wǎng)頁文檔加載完畢,可保證提取到完整信息。樣例代碼如下:

          Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
          Application.StatusBar="網(wǎng)頁文檔下載完畢!"      '在狀態(tài)欄中輸入提示信息
          Dim doc As Object
          Set doc=WebBrowser1.Document
          End Sub

          注:DocumentComplete確保WebBrowser下載完成網(wǎng)頁文檔后,通過文檔Document對象可提取網(wǎng)頁標(biāo)簽信息

          6、WebBrowser控件調(diào)用網(wǎng)頁JS函數(shù)

          根據(jù)網(wǎng)頁excelVBA.html內(nèi)容,在窗體【調(diào)用網(wǎng)頁JS函數(shù)】命令按鈕的Click事件中輸入如下代碼:

          Private Sub CommandButton2_Click()
          '調(diào)用網(wǎng)頁中無參JavaScript函數(shù)alertNull
          WebBrowser1.Document.parentwindow.execScript "alertNull()", "JavaScript"
          '調(diào)用網(wǎng)頁中有參JavaScript函數(shù)callWithPar
          WebBrowser1.Document.parentwindow.execScript "callWithPar('銀河統(tǒng)計工作室','哈爾濱')", "JavaScript"
          MsgBox WebBrowser1.Document.Script.oSum(25, 75)    '調(diào)用JS函數(shù)返回值
          End Sub

          注:代碼中調(diào)用的JS函數(shù)在網(wǎng)頁文本script標(biāo)簽之間。注意,打開對應(yīng)網(wǎng)頁后再運行【調(diào)用網(wǎng)頁JS函數(shù)】命令按鈕

          運行窗體,點擊【調(diào)用網(wǎng)頁JS函數(shù)】命令按鈕,結(jié)果如下圖:

          本文我們創(chuàng)建了一個InternetExplorer對象并設(shè)置了一些屬性。然后,使用.navigate方法打開網(wǎng)頁,并使用.document.parentWindow.execScript方法執(zhí)行了一個簡單的JavaScript代碼。

          請注意,使用InternetExplorer對象加載和執(zhí)行JavaScript代碼需要將"Microsoft Internet Controls"引用添加到你的VBA項目中。你可以在VBA編輯器的"工具"菜單中的"引用"對話框中勾選該引用。

          在VBA中,除了InternetExplorer對象,還可以使用其他瀏覽器對象來加載和操作Web頁面中的JavaScript代碼。

          • Chrome瀏覽器對象:可以使用Chrome瀏覽器的COM接口(Chrome COM Interface)來在VBA中加載和操作Chrome瀏覽器中的JavaScript代碼。這需要先安裝Chrome瀏覽器COM接口,然后通過創(chuàng)建Chrome瀏覽器對象來實現(xiàn)。示例代碼:
          Sub RunJavaScriptInChrome()
              Dim Chrome As Object
              ' 創(chuàng)建 Chrome 瀏覽器對象
              Set Chrome=CreateObject("ChromeTab.ChromeBrowser")
              ' 打開指定網(wǎng)址
              Chrome.navigate "http://www.example.com"
              ' 等待加載完畢
              Do While Chrome.Busy Or Chrome.readyState <> 4
                  DoEvents
              Loop
              ' 執(zhí)行 JavaScript 代碼
              Chrome.ExecuteScript "alert('Hello, JavaScript in Chrome!');"
              ' 關(guān)閉 Chrome 瀏覽器對象
              Chrome.Quit
              ' 釋放對象引用
              Set Chrome=Nothing
          End Sub

          Firefox瀏覽器對象:類似地,也可以使用Firefox瀏覽器的COM接口來在VBA中加載和操作Firefox瀏覽器中的JavaScript代碼。這同樣需要先安裝Firefox瀏覽器COM接口,并通過創(chuàng)建Firefox瀏覽器對象來實現(xiàn)。以下是一個示例代碼:

          Sub RunJavaScriptInFirefox()
              Dim Firefox As Object
              ' 創(chuàng)建 Firefox 瀏覽器對象
              Set Firefox=CreateObject("Mozilla.Browser")
              ' 打開指定網(wǎng)址
              Firefox.navigate "http://www.example.com"
              ' 等待加載完畢
              Do While Firefox.Busy Or Firefox.readyState <> 4
                  DoEvents
              Loop
              ' 執(zhí)行 JavaScript 代碼
              Firefox.ExecuteScript "alert('Hello, JavaScript in Firefox!');"
              ' 關(guān)閉 Firefox 瀏覽器對象
              Firefox.Quit
              ' 釋放對象引用
              Set Firefox=Nothing
          End Sub

          使用WebBrowser控件按網(wǎng)址打開服務(wù)器端網(wǎng)頁后,即建立起EXCEL和網(wǎng)頁HTML文檔的數(shù)據(jù)交換通道,實現(xiàn)在VBA中操控網(wǎng)頁、自動抓取信息等功能。

          試網(wǎng)站和 Web 應(yīng)用程序的移動響應(yīng)能力是每個 Web 設(shè)計師和開發(fā)人員必須處理得最令人沮喪的任務(wù)之一。

          它通常涉及聘請昂貴的代理商和購買訂閱計劃。但現(xiàn)在也有更實惠的解決方案,比如 LT 瀏覽器。

          LT Browser是一款專為設(shè)計人員和開發(fā)人員設(shè)計的新型瀏覽器,可用于在 50 多種移動設(shè)備上測試網(wǎng)站。而且它是免費使用的!

          我們仔細(xì)研究了這個偉大的新工具,看看它如何在網(wǎng)站開發(fā)的移動測試階段受益。讓我們看看這個瀏覽器能夠提供什么。

          什么是 LT 瀏覽器?

          LT Browser 由 LambdaTest 開發(fā),是一款專門測試網(wǎng)站響應(yīng)能力的新型瀏覽器。它包括 50 多個流行移動設(shè)備的視口,讓您只需點擊幾下即可立即測試移動網(wǎng)站。

          與為開發(fā)人員打造的其他瀏覽器不同,LT Browser 專注于解決 Web 開發(fā)過程中的一個,也是最大的問題之一——移動測試。它提供了測試網(wǎng)站和 Web 應(yīng)用程序的響應(yīng)能力、調(diào)試甚至獲取性能報告所需的所有工具,所有這些都集中在一處。

          為什么要使用 LT 瀏覽器?

          全球移動互聯(lián)網(wǎng)用戶超過43.2億。移動用戶占互聯(lián)網(wǎng)總流量的 54% 以上。

          無論您是在簡單網(wǎng)站上工作的自由設(shè)計師,還是在大型網(wǎng)絡(luò)應(yīng)用程序上工作的團隊,LT Browser 都提供了一組寶貴的工具。

          毋庸置疑,移動平臺現(xiàn)在是幾乎所有 Web 開發(fā)人員和設(shè)計人員的主要關(guān)注點。但它也是最具挑戰(zhàn)性的平臺。為桌面和移動平臺開發(fā)之間仍然存在很大差距。缺乏可用于移動可用性測試和響應(yīng)性測試的工具是問題的主要部分。

          多虧了 LT Browser 之類的工具,這個問題很快就會不存在。在 LT 瀏覽器的幫助下,您將不再需要求助于昂貴的工具或聘請代理來移動測試您的網(wǎng)站和網(wǎng)絡(luò)應(yīng)用程序。

          無論您是在簡單網(wǎng)站上工作的自由設(shè)計師,還是在大型網(wǎng)絡(luò)應(yīng)用程序上工作的團隊,LT 瀏覽器都提供了一組寶貴的工具來解決開發(fā)適合移動設(shè)備的網(wǎng)站的一些最大問題。

          主要特點

          LT 瀏覽器就像任何其他瀏覽器一樣工作。它與 Windows、macOS 甚至 Ubuntu 兼容。您可以下載并安裝桌面應(yīng)用程序并創(chuàng)建一個免費的 LambaTest 帳戶已開始使用。

          乍一看,LT Browser 似乎是一個簡單的瀏覽器。但它包含了很多很棒的功能。以下是它的一些最佳功能。

          在 50 多個設(shè)備上進行測試

          使用 LT 瀏覽器,您可以在 50 多種不同的設(shè)備視口上測試網(wǎng)站和 Web 應(yīng)用程序。其中包括支持從 iPhone 到三星 Galaxy 標(biāo)簽、MacBook 以及介于兩者之間的所有設(shè)備的移動設(shè)備、平板電腦和桌面設(shè)備。它甚至可以讓您同時在兩臺設(shè)備上查看網(wǎng)站。

          如果在列表中找不到設(shè)備,也可以輕松創(chuàng)建自定義移動或桌面視口。設(shè)置新視口非常容易。

          即時調(diào)試

          LT Browser 最酷的功能之一是它的 DevTools 控制臺,它支持實時調(diào)試。如果您在網(wǎng)站測試中遇到問題,您可以快速切換到調(diào)試模式并找到解決方案。

          LT 瀏覽器中的 DevTools 還支持熱重載,這意味著您在調(diào)試模式下對代碼所做的任何更改都將在移動視口中實時預(yù)覽。

          這使您可以立即看到所做的更改。對于開發(fā)人員進行調(diào)試以及設(shè)計人員進行不同設(shè)計選擇的試驗,這是一項非常有價值的功能。

          錄制視頻和截圖

          在網(wǎng)站中發(fā)現(xiàn)了您想與團隊討論的問題?或者想向其他團隊成員請求新功能?然后,您可以直接從 LT 瀏覽器輕松抓取屏幕截圖或錄制視頻剪輯,以與您的團隊或客戶分享。

          您捕獲的所有視頻剪輯和屏幕截圖都將整齊地存儲在瀏覽器的“媒體”部分,因此您無需在計算機硬盤驅(qū)動器中搜索它們。

          網(wǎng)絡(luò)節(jié)流

          并非世界上的每個人都擁有超快的互聯(lián)網(wǎng)連接。大多數(shù)移動用戶仍在以 3G 速度瀏覽網(wǎng)頁。

          使用 LT Browser,您可以對網(wǎng)絡(luò)進行節(jié)流,以體驗不同網(wǎng)絡(luò)條件下的網(wǎng)站性能。這對于查看您的網(wǎng)站性能如何、加載頁面需要多長時間以及動畫交互在慢速互聯(lián)網(wǎng)條件下如何工作非常有用。

          即時錯誤報告

          有許多肉眼看不到的錯誤和問題。但是,您不必掃描數(shù)百行代碼來查找您的網(wǎng)站出了什么問題。LT 瀏覽器具有快速錯誤報告功能,可提供您網(wǎng)站上發(fā)現(xiàn)的最大問題的詳細(xì)摘要。

          Google Lighthouse 性能報告

          如果您想查看您的網(wǎng)站在 Google Lighthouse 測試中的表現(xiàn)如何,只需單擊一下即可。LT 瀏覽器包含一個由 Google Lighthouse 提供支持的性能測試選項,可為您提供有關(guān)網(wǎng)站性能不同方面的詳細(xì)報告。

          它還將對需要改進的網(wǎng)站領(lǐng)域提供建議和建議。

          第三方應(yīng)用程序集成

          LT Browser 還支持?jǐn)?shù)十種第三方應(yīng)用程序集成,包括 Slack 和 Asana。這樣可以更輕松地跟蹤錯誤和報告問題。

          例如,您可以從 LT Browser 抓取屏幕截圖,將其標(biāo)記為錯誤,然后直接從瀏覽器將其分配給團隊中的某個人查看。

          它要多少錢?

          LT Browser 完全免費使用,沒有任何限制。該瀏覽器作為 LambdaTest 跨瀏覽器測試平臺的一部分提供。

          如果您想將移動測試提升到一個新的水平,您可以利用 Lambdatest 云平臺中提供的許多其他工具,包括自動化測試、模擬器上的本機應(yīng)用程序測試等。

          Lambatest 有一個免費計劃和高級計劃,每月 15 美元起。

          結(jié)論

          LT Browser 是網(wǎng)頁設(shè)計師和開發(fā)者必備的工具。在移動測試網(wǎng)站和 Web 應(yīng)用程序方面,它為您提供了難以置信的價值。

          試一下,親自看看它的功能,你肯定會喜歡的。


          主站蜘蛛池模板: 亚洲永久无码3D动漫一区| 无码少妇A片一区二区三区| 日韩成人无码一区二区三区| 国精产品一区一区三区| 亚洲一区视频在线播放| 久久久国产一区二区三区| 久久久久女教师免费一区| 国产色综合一区二区三区 | 麻豆一区二区免费播放网站| 日韩精品无码一区二区中文字幕| 国产在线一区二区综合免费视频| 无码国产精品一区二区免费3p| 人妻无码第一区二区三区| 在线成人一区二区| 人妻体内射精一区二区| 无码av免费一区二区三区| 国产乱码精品一区二区三区中文 | 三上悠亚国产精品一区| 中文字幕一区二区区免| 国产精品视频分类一区| 国产精品第一区第27页| 久久精品一区二区东京热| 亚洲A∨精品一区二区三区下载| 国产成人精品一区二区三在线观看| 白丝爆浆18禁一区二区三区 | 国产主播一区二区三区在线观看| 无码aⅴ精品一区二区三区浪潮 | 精品无码一区二区三区在线| 国产精品一区二区在线观看| 水蜜桃av无码一区二区| 一区二区不卡视频在线观看| 久久精品免费一区二区三区| 午夜DV内射一区区| 亚洲一区二区三区成人网站| 国内国外日产一区二区| 人妻夜夜爽天天爽一区| 国产综合精品一区二区三区| 午夜视频久久久久一区| 国产伦精品一区二区三区精品| 99精品一区二区免费视频| 国产午夜三级一区二区三|