前期准备
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 创建Chrome浏览器对象 chrome_options = webdriver.ChromeOptions() # 隐藏正受到自动测试软件的控制。 chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) driver = webdriver.Chrome(options=chrome_options) driver.implicitly_wait(30) driver.get('https://www.baidu.com') driver.maximize_window()
一般情况:(这种方法只限两个窗口的,如果是3个以上窗口,就会很麻烦不推荐)
1.获取当前窗口的句柄:
current_window_handle = driver.current_window_handle
2.获取所有窗口的句柄:
window_handles = driver.window_handles
3.便利所有窗口句柄,切换到目标窗口:
for window_handle in window_handles: if window_handle != current_window_handle: driver.switch_to.window(window_handle) break
依次遍历所有窗口句柄,如果找到与当前窗口句柄不同的窗口,则切换到该窗口并跳出循环。
多窗口(3个及以上):
前提是你要知道多个窗口的title。
for window_handle in window_handles: driver.switch_to.window(window_handle) if driver.title == "My Target Window": break
通过 title 快速的切换到对应窗口
示例:
from time import sleep from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 创建Chrome浏览器对象 chrome_options = webdriver.ChromeOptions() # 隐藏正受到自动测试软件的控制。 chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) driver = webdriver.Chrome(options=chrome_options) driver.implicitly_wait(30) driver.get('https://www.baidu.com') driver.maximize_window() print(driver.current_window_handle) driver.find_element(By.LINK_TEXT, "新闻").click() window_handles = driver.window_handles for window_handle in window_handles: driver.switch_to.window(window_handle) if driver.title == '百度新闻——海量中文资讯平台': break print('我是新闻', driver.current_window_handle) driver.find_element(By.ID, 'ww').send_keys('你好') # 操作新闻界面的输入框,测试操作句柄是否切换到新闻这个界面。如果没有切换到就会报错 sleep(2) # 在百度首页点击 视频,打开百度视频 driver.find_element(By.LINK_TEXT, "视频").click() window_handles = driver.window_handles for window_handle in window_handles: driver.switch_to.window(window_handle) if driver.title == '百搜视频——业界领先的中文视频搜索引擎之一': break print('我是视频', driver.current_window_handle) # driver.find_element(By.XPATH, '//input[@type="submit"]').click() print(driver.window_handles) sleep(2) # 关闭这个标签页 driver.close() for window_handle in window_handles: driver.switch_to.window(window_handle) if driver.title == '你好_百度视频搜索': break driver.close() print(driver.window_handles) sleep(2) # 关闭浏览器 driver.quit()
注意:
千万不要用下面这种方式切换操作句柄。新增界面后,用driver.window_handles[-1],来把句柄切换到到最新新增页面。(有坑)
driver.switch_to.window(driver.window_handles[-1])
['C514C3923F2B0885AE7EA66D99EB10A3', 'AE25C5291632286CEE03566AA561956E', '5B7CA64EE69AF45F8A431F253A559524'] 列表里面的句柄不一定是按顺序的,最后一个是最新的
标签:webdriver,窗口,selenium,driver,handles,window,切换,句柄,handle From: https://www.cnblogs.com/xujunhui/p/17696097.html