本文共 2195 字,大约阅读时间需要 7 分钟。
在Selenium中,每当打开一个新窗口,会产生一个唯一的浏览器窗口句柄。所有当前窗口的句柄会被存储在window_handles属性中,这个属性返回的是一个句柄列表。每个句柄具有类似格式的字符串形式(如CDwindow-XXXX),其中CD表示浏览器类型(Chrome或Edge)。
例如,在打开百度主页面后,点击某个链接会自动产生新的窗口,此时可以通过driver.window_handles获取所有窗口句柄。通过查看句柄列表,可以判断不同的窗口状态。
获取所有窗口句柄 逐次获取当前所有窗口句柄的代码如下:
from selenium.webdriver import Chromefrom time import sleepdriver = Chrome() # 使用上下文管理器更优driver.get('http://www.baidu.com') # 访问百度sleep(2) # 等待2秒handles = driver.window_handles # 获取窗口句柄列表print("当前窗口句柄:", handles) 观察句柄变化 关注窗口句柄的变化规律是基于操作流程。例如:
CDwindow-XXXX) 这种顺序并不仅仅依赖于界面布局,而是基于操作先后性。统一的窗口句柄格式 不论是Chrome还是Edge窗口,窗口句柄的格式均符合标准性模式,例如:
CDwindow-XXXXXXXXXXXXXXXX
这种格式便于分类识别不同类型的窗口。
当需要操作窗口时,仅切换到指定句柄的窗口即可。使用以下方法:
from selenium.webdriver import Chromefrom time import sleepdriver = Chrome() # 使用上下文管理器driver.get('http://www.baidu.com') # 访问百度主页sleep(2) # 等待页面加载# 点击新闻链接driver.find_element_by_link_text('新闻').click()sleep(2) # 等待新闻页面加载# 获取所有窗口句柄handles = driver.window_handlesprint("可操作窗口句柄:", handles)# 切换到第三个窗口(百度新闻窗口)driver.switch_to.window(handles[2])sleep(10) # 允许页面完全加载# 点击“科技”链接tech_link = driver.find_element_by_link_text("科技")tech_link.click()sleep(2) # 允许页面跳转完成 窗口判断依据 核实切换窗口的依据。例如,百度新闻窗口的判断可基于以下条件:
“CDwindow-”开头,且包含特定判断关键字,就为百度新闻窗口。窗口顺序问题 切换窗口时,索引必须与实际操作窗口的句柄顺序一致。例如,若新窗口是第三个窗口,则必须选择handles[2]。
窗口状态监控 在关键操作前,建议重新获取窗口句柄列表,确保已进入目标窗口状态。
以下代码展示了完整的窗口句柄获取与切换流程:
from selenium.webdriver import Chromefrom time import sleep# 初始化浏览器driver = Chrome()# 访问百度主页driver.get('http://www.baidu.com')sleep(2)# 点击“新闻”链接driver.find_element_by_link_text('新闻').click()sleep(2)# 获取当前所有窗口句柄current_handles = driver.window_handlesprint("所有窗口句柄:", current_handles)# 切换到“百度新闻”窗口# 假设“百度新闻”窗口是第三个窗口driver.switch_to.window(current_handles[2])# 进行后续操作,例如点击科技链接driver.find_element_by_link_text('科技').click()sleep(2) 通过理解窗口句柄机制,可以实现对多窗口环境的统一控制,为复杂应用自动化提供重要支持。
转载地址:http://bkljz.baihongyu.com/