Selenium技术在一个浏览器中只能操作访问一个网页,很多情况下还需要在新窗口中打开其他网页,本帖借助执行JavaScript脚本的方式打开新的网页,然后利用SwithTo在各个窗口句柄里切换。
IWebDriver对象的WindowHandles是一个字符串数组,存储的是每个网页的句柄(句柄是一个字符串,不是数字)。
下面的程序,一开始打开百度,然后连续新建3个窗口,打开新浪、京东、淘宝。
WD.New_ChromeDriver Service:=Service, Options:=Options Dim Utility As SeleniumBasic.Utility Dim windows() As String Dim goal As String Set Utility = New SeleniumBasic.Utility WD.url = "https://www.baidu.com/" Utility.Sleep 1000 WD.ExecuteScript "window.open('https://www.sina.com.cn/')" Utility.Sleep 1000 WD.ExecuteScript "window.open('https://www.jd.com/')" Utility.Sleep 1000 WD.ExecuteScript "window.open('https://www.taobao.com/')" Utility.Sleep 1000 windows = WD.WindowHandles For i = 0 To UBound(windows) WD.SwitchTo.Window windows(i) Debug.Print WD.url, WD.Title If WD.url Like "*jd*" Then goal = windows(i) End If Utility.Sleep 1000 Next i WD.SwitchTo.Window goal Utility.Sleep 1000 WD.Close '关闭京东 Utility.Sleep 1000 Debug.Print UBound(WD.WindowHandles) + 1 '剩下多少个窗口
可以看出,就连访问每个网页的标题等简单信息,也必须切换过去才能访问。程序执行到最后,使用Close方法关闭了京东。
如果浏览器中把最后一个网页也给Close了,那么此时相当于Quit方法,浏览器也就退出了。