什么是浏览器窗口句柄?
当打开一个浏览器并打开了一个新标签页时,该标签页就会有一个句柄标识(句柄值)。直到你关闭了该标签页,该句柄标识(句柄值)才消失。
所以,当我们打开一个浏览器并打开了多个标签页时,关闭一个标签页不会影响其他标签页,就是因为每个标签页有了唯一的标识。
1、获取当前标签页句柄:current_window_handle
示例:
from selenium import webdriver driver = webdriver.Firefox() # 打开百度 driver.get("https://www.baidu.com") # 获取当前标签页的句柄值 c_handle = driver.current_window_handle print(type(c_handle)) print(c_handle)
运行结果如下:
<class 'str'> 18
我们可以看到,通过current_window_handle获取到了当前标签页的属性值,且该值的类型为字符串。
2,获取浏览器所有标签页的句柄:window_handles
示例:
driver = webdriver.Firefox() # 打开百度 driver.get("https://www.baidu.com") # 打开网易门户 js_new_window = "window.open('https://www.163.com')" driver.execute_script(js_new_window) # 获取浏览器中所有标签页的句柄值 handles = driver.window_handles print(type(handles)) for handle in handles: print(handle)
执行结果如下:
<class 'list'> 18 4294967297
我们可以看到,window_handles返回的是一个列表,里面包含了所有的标签页的句柄。
3,切换句柄:switch_to.window()
传参window_name,即传入句柄值
我们看一下window()方法:
def window(self, window_name): """ Switches focus to the specified window. :Args: - window_name: The name or window handle of the window to switch to. :Usage: driver.switch_to.window('main') """ if self._driver.w3c: self._w3c_window(window_name) return data = {'name': window_name} self._driver.execute(Command.SWITCH_TO_WINDOW, data)
我们可以看到:window()方法接收参数,并执行command命令进行窗口切换
下面我们看一下切换窗口的示例:
from selenium import webdriver driver = webdriver.Firefox() # 打开百度 driver.get("https://www.baidu.com") # 打开网易门户 js_new_window = "window.open('https://www.163.com')" driver.execute_script(js_new_window) # 获取浏览器中所有标签页的句柄值 handles = driver.window_handles # 当前窗口句柄值 c_handle = driver.current_window_handle print("当前标签页句柄值:", c_handle) # 切换窗口 driver.switch_to.window(handles[1]) # 切换窗口后的句柄值 c1_handle = driver.current_window_handle print("切换窗口后的标签页句柄值:", c1_handle)
执行结果如下,我们可以看到当前窗口句柄值已经不同了,说明切换成功:
当前标签页句柄值: 18
切换窗口后的标签页句柄值: 4294967297
这个例子的执行表现过程为:打开浏览器并打开百度首页->js打开网易门户->获取所有窗口句柄值->打印当前窗口句柄值->切换窗口->打印当前窗口句柄值(切换
后的窗口)》