《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对象用于切换,具有的方法有
- Function ActiveElement() As IWebElement
- Function Alert() As IAlert
- Sub DefaultContent()
- Sub Frame(WE As IWebElement)
- 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用于处理弹窗信息。