1. 程式人生 > >《SeleniumBasic 3.141.0.0 - 在VBA中操作瀏覽器》系列文章之一:SeleniumBasic的下載和部署

《SeleniumBasic 3.141.0.0 - 在VBA中操作瀏覽器》系列文章之一:SeleniumBasic的下載和部署

Selenium是一種非常流行的瀏覽器和網頁自動化技術,開發人員可以使用C#、Java、Python等語言來操作Chrome、Firefox等瀏覽器。

VBA語言可以直接操作訪問Microsoft Internet Explorer(IE)瀏覽器,但是IE瀏覽器的問題很多,最近不再受歡迎。

Chrome等瀏覽器有著速度快等優勢,使用群體非常多。習慣用VBA程式設計的人們如何自動操作IE以外的瀏覽器呢?

在網上可以找到一個SeleniumBasic v2.0.9.0的軟體,作者是Florent BREHERET。在電腦中安裝了該軟體後,可以在VBA、VBS、VB6等Basic系列的語言中呼叫Selenium的功能。

然而,在很多電腦上會出現“無法建立物件”、“自動化錯誤”等異常,再加上這個軟體一直沒更新,於是最近我自己從頭開發了SeleniumBasic 3.141.0.0,以下簡稱V3。

在該系列文章中我會陸續講解工具的部署、Selenium環境的搭建、使用VBA操作瀏覽器的基本語法、Selenium中高階技巧等知識。

友情提示:Selenium是一項繁瑣而強大的技術,如果你沒足夠的耐心,請繞道,以免浪費您的時間。

SeleniumBasic 3.141.0.0

  • 支援的程式語言:VBA、VB6、VBS等。同時支援32和64位VBA。
  • 支援的瀏覽器:Chrome、Firefox、Microsoft Edge、Internet Explorer、Opera、Safari、QQ和360等瀏覽器。
  • 主要功能:建立瀏覽器、定位元素、視窗和框架切換等最常用功能。
  • 適用人群:熟悉VBA方面的語言,有Selenium部署和開發經驗更佳。

接下來講一下V3的構成和部署方法。首先到騰訊微雲

下載:https://share.weiyun.com/5dpcNqx

在Tools資料夾裡面找到我分享的SeleniumBasic.zip,下載並解壓到方便找到的本地資料夾中(別放在桌面)。

  會看到8個檔案,功能如下:

  • SeleniumBasic.dll和SeleniumBasic.tlb:這兩個是型別庫,提供了VBA環境中用到的SeleniumBasic名稱空間中的物件、成員。在VBA工程中需要新增引用SeleniumBasic.tlb。
  • RegAsm.bat:用於註冊dll,因為釋放到你電腦以後,只是把檔案放到磁碟上了,要讓dll和tlb發揮作用,還需要向登錄檔中寫入內容。因此需要用管理員許可權執行該bat檔案。
  • UnRegAsm.bat:反註冊。當你不再需要V3時,用管理員許可權執行這個bat,可以從登錄檔中移除寫入的內容。相當於軟體的解除安裝。
  • WebDriver.dll和WebDriver.Support.dll:.NET語言所需的動態連結庫,V3也依賴這兩個庫,因此也是必需的。
  • Config.xml:配置檔案。由於Selenium可以建立多種型別的瀏覽器,具體是啟動Chrome還是Firefox,由這個配置檔案來指定。該檔案中指定了瀏覽器的安裝位置、驅動檔案的位置、是否隱藏cmd視窗等。

我的壓縮包中提供的Config.xml,可以用記事本開啟檢視。其中預設輸入了4個瀏覽器的配置資訊,需要注意的是V3建立瀏覽器時只讀取最上面第一個browser的資訊。

例如Chrome瀏覽器,binarylocation屬性指明瞭瀏覽器的安裝位置,driver的name和directory指明瞭驅動檔案的位置等,如果某些屬性不明確,可以設定為空字串。

<config>
    <browser name="Chrome" binarylocation="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe">
        <driver name="chromedriver.exe" directory="E:\Selenium\Drivers"/>
        <options HideCommandPromptWindow="true"/>
    </browser>

    <browser name="Firefox" binarylocation="C:\Program Files\Mozilla Firefox\firefox.exe">
        <driver name="geckodriver.exe" directory="E:\Selenium\Drivers"/>    
        <options HideCommandPromptWindow="true"/>
    </browser>

    <browser name="Edge" binarylocation="">
        <!--"msedgedriver.exe" rename to "MicrosoftWebDriver.exe"-->
        <driver name="MicrosoftWebDriver.exe" directory="E:\Selenium\Drivers"/>     
        <options HideCommandPromptWindow="true"/>
    </browser>

    <browser name="IE" binarylocation="">
        <driver name="IEDriverServer.exe" directory="E:\Selenium\Drivers"/>    
        <options HideCommandPromptWindow="true"/>
    </browser>
</config>

瞭解了以上概念以後,接下來動手進行實際操作。

  • 第一步:註冊dll

選中regasm.bat,右鍵選單選中以管理員身份執行。稍後彈出一個黑色視窗,提示註冊成功。

  

  • 第二步:VBA中新增引用

啟動Excel或其他Office元件,開啟VBA程式設計環境,點選選單“工具/引用”,在引用對話方塊中點選“瀏覽”。

  

 彈出的選擇檔案對話方塊中,過濾器換成“所有檔案”,找到前文所述的SeleniumBasic.tlb,開啟。

 

 這樣,引用中就出現了一條SeleniumBasic

 VBA中按下F2,物件瀏覽器中切換到SeleniumBasic,可以看到很多型別和方法。

 

 

該型別庫包含3個主要物件

WebDriver:瀏覽器物件

WebElement:網頁元素物件

SelectElement:網頁中特指select標籤形成的下拉框元素

  •  第三步:書寫程式碼 在VBA插入一個標準模組,頂部宣告公有變數WD,下面的程式演示了定位百度一下的關鍵字文字框和按鈕。
Public WD As SeleniumBasic.WebDriver
Sub Baidu()
    On Error GoTo Err1
    Set WD = New SeleniumBasic.WebDriver
    WD.Start
    WD.URL = "https://www.baidu.com"
    Dim form As SeleniumBasic.WebElement
    Dim keyword As SeleniumBasic.WebElement
    Dim button As SeleniumBasic.WebElement
    Set form = WD.FindElementById("form")
    Set keyword = form.FindElementById("kw")
    keyword.Clear
    keyword.SendKeys "好看視訊"
    Set button = form.FindElementById("su")
    button.Click
    Debug.Print WD.Title, WD.URL
    Debug.Print WD.PageSource
    MsgBox "下面退出瀏覽器。"
    WD.Quit
    Exit Sub
Err1:
    MsgBox Err.Description, vbCritical
End Sub

程式碼雖然寫完了,但是。。。

在您的電腦上執行上述過程,估計出不來瀏覽器,也看不到百度一下。別急,這是因為上面的操作只是把編碼這一側搞定了,瀏覽器和驅動,以及配置檔案還沒設定好呢,下節課再