selenium浏览器操作篇:浏览器窗口句柄切换


 

什么是浏览器窗口句柄?
当打开一个浏览器并打开了一个新标签页时,该标签页就会有一个句柄标识(句柄值)。直到你关闭了该标签页,该句柄标识(句柄值)才消失。
所以,当我们打开一个浏览器并打开了多个标签页时,关闭一个标签页不会影响其他标签页,就是因为每个标签页有了唯一的标识。

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打开网易门户->获取所有窗口句柄值->打印当前窗口句柄值->切换窗口->打印当前窗口句柄值(切换
后的窗口)》


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM