📌  相关文章
📜  driver.getwindowhandle() 和 driver.getwindowhandles() (1)

📅  最后修改于: 2023-12-03 15:00:32.238000             🧑  作者: Mango

Selenium中的driver.get_window_handle()和driver.get_window_handles()

简介

在Selenium中,WebDriver是操作浏览器的核心。有时候我们需要在多个窗口之间进行切换,这时就需要调用 driver.get_window_handle()driver.get_window_handles()方法。

driver.get_window_handle()

driver.get_window_handle()方法返回当前窗口的句柄(handle)。窗口句柄是一个唯一标识符,用来定位浏览器中的窗口。一般情况下,当前窗口的句柄是第一个打开的窗口。

语法:

current_window_handle = driver.get_window_handle()

用法示例:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
current_window_handle = driver.get_window_handle()
print("当前窗口句柄为:%s" % current_window_handle)

输出结果:

当前窗口句柄为:CDwindow-0F14EDB6BE9441306F3B4E4AE4FCD0DB
driver.get_window_handles()

driver.get_window_handles()方法返回所有窗口的句柄。这些句柄存储在一个Python列表中,列表的每一个元素都是一个字符串类型的窗口句柄。

语法:

all_window_handles = driver.get_window_handles()

用法示例:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
all_window_handles = driver.get_window_handles()
print("所有窗口句柄为:%s" % all_window_handles)

输出结果:

所有窗口句柄为:['CDwindow-0F14EDB6BE9441306F3B4E4AE4FCD0DB']
窗口切换

在调用driver.get_window_handle()方法和driver.get_window_handles()方法之后,我们就可以开始在窗口之间进行切换了。

切换到新窗口:

from selenium import webdriver
driver = webdriver.Chrome()
# 打开百度首页
driver.get("https://www.baidu.com/")
# 打开一个新窗口
driver.execute_script('window.open("http://www.sogou.com");')
# 获取所有窗口句柄
all_window_handles = driver.get_window_handles()
# 切换到新窗口
driver.switch_to.window(all_window_handles[1])

切换回原来的窗口:

from selenium import webdriver
driver = webdriver.Chrome()
# 打开百度首页
driver.get("https://www.baidu.com/")
# 打开一个新窗口
driver.execute_script('window.open("http://www.sogou.com");')
# 获取所有窗口句柄
all_window_handles = driver.get_window_handles()
# 切换到新窗口
driver.switch_to.window(all_window_handles[1])
# 切换回原来的窗口
driver.switch_to.window(all_window_handles[0])

注意事项:

  • 如果你尝试切换到一个不存在的窗口,那么将会抛出一个 NoSuchWindowException 异常。
  • 如果你切换到一个已经关闭的窗口,那么将会抛出一个 NoSuchWindowException 异常。
  • 如果你在关闭了所有窗口之后,继续尝试使用driver对象,将会抛出一个 NoSuchWindowException 异常。
总结

本文介绍了Selenium中的 driver.get_window_handle()driver.get_window_handles()方法,以及如何在多个窗口之间切换。这些方法在处理需要在不同窗口之间进行操作的场景非常有用。