1. 程式人生 > 實用技巧 >《SeleniumBasic 3.141.0.0 - 在VBA中操作瀏覽器》系列文章之十一:視窗控制代碼與視窗切換

《SeleniumBasic 3.141.0.0 - 在VBA中操作瀏覽器》系列文章之十一:視窗控制代碼與視窗切換

一個瀏覽器可能開啟多個網頁視窗。Selenium中每個視窗都有一個控制代碼,控制代碼是一個文字字串。Selenium在任何時刻只能操作和讀寫1個視窗,要操作其他視窗必須用SwitchTo切換進去。

假設瀏覽器中打開了百度、京東、新浪。下面的程式碼可以返回每個視窗的控制代碼

    Dim windows() As String
    windows = WD.WindowHandles
    For i = 0 To UBound(windows)
        Debug.Print windows(i)
    Next i

立即視窗列印如下結果:

CDwindow-99175AB43E76632E809F8A1DBAB051D7

CDwindow-63759CACCD0CDD50084616C84EA8344C
CDwindow-F631E8013BDC18EA9E7F86F0E8F9B1CD

如果要獲取每個視窗的標題、URL、網頁原始碼等操作,必須切換到某個視窗中才能。

SeleniumBasic的ITargetLocator物件用於切換,具有的方法有

  1. Function ActiveElement() As IWebElement
  2. Function Alert() As IAlert
  3. Sub DefaultContent()
  4. Sub Frame(WE As IWebElement)
  5. Sub Window(windowName As String)

本節使用的是第5個方法,Window方法,作用是切換到指定控制代碼的視窗中。

    Dim windows() As String
    Dim Locator As New SeleniumBasic.ITargetLocator
    windows = WD.WindowHandles
    Set Locator = WD.SwitchTo
    For i = 0 To UBound(windows)
        Locator.Window windows(i)
        Debug.Print windows(i), WD.Title, WD.URL
    
Next i

執行上述程式碼,一邊獲取控制代碼,一邊切換進去返回標題資訊。

以上5個方法中,Frame與DefaultContent經常同時出現,用於框架之間的切換。Alert用於處理彈窗資訊。