1、窗口切换
- 获取打开的窗口句柄总数,返回的是一个列表
handles=driver.window_handles
- 切换到最新的窗口句柄
driver.switch_to.window(handles[-1])
- 操作代码如下:
1 import time 2 from selenium import webdriver 3 from selenium.webdriver.support import expected_conditions as EC 4 from selenium.webdriver.support.wait import WebDriverWait 5 from selenium.webdriver.common.by import By 6 # 窗口切换操作 7 driver=webdriver.Chrome() 8 # 访问一个网页 9 driver.get("https://www.baidu.com") 10 driver.maximize_window() 11 driver.find_element_by_id('kw').send_keys("柠檬班") 12 driver.find_element_by_id('su').click() 13 WebDriverWait(driver,30).until(EC.visibility_of_element_located((By.XPATH,'//a[contains(text(),"吧_百度贴吧")]'))) 14 driver.find_element_by_xpath('//a[contains(text(),"吧_百度贴吧")]').click() 15 time.sleep(0.5)#等待0.5秒,确定点击的网页都打开 16 # 获得打开浏览器的句柄,返回的是列表 17 handles=driver.window_handles 18 print(handles) 19 driver.switch_to.window(handles[-1]) 20 # 打印当前句柄 21 print(driver.current_window_handle) 22 # :Args: driver.switch_to.window(window_name) 23 # - window_name: The name or window handle of the window to switch to. 24 WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//div[@id='signstar_wrapper']//a[@title='签到']")))#等待元素出现 25 driver.find_element_by_xpath("//div[@id='signstar_wrapper']//a[@title='签到']").click() 26 WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.ID,"TANGRAM__PSP_11__footerULoginBtn"))) 27 driver.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn').click() 28 driver.find_element_by_id('TANGRAM__PSP_5__closeBtn').click()
2、判断新的窗口是否已经打开使用
EC.new_window_is_opened(current_handles)
操作代码如下:
1 import time 2 from selenium import webdriver 3 from selenium.webdriver.support import expected_conditions as EC 4 from selenium.webdriver.support.wait import WebDriverWait 5 from selenium.webdriver.common.by import By 6 # 窗口切换操作 7 driver=webdriver.Chrome() 8 # 访问一个网页 9 driver.get("https://www.baidu.com") 10 driver.maximize_window() 11 driver.find_element_by_id('kw').send_keys("柠檬班") 12 driver.find_element_by_id('su').click() 13 WebDriverWait(driver,30).until(EC.visibility_of_element_located((By.XPATH,'//a[contains(text(),"吧_百度贴吧")]'))) 14 # 获取打开新页面之前的窗口总的句柄 15 handles=driver.window_handles 16 driver.find_element_by_xpath('//a[contains(text(),"吧_百度贴吧")]').click() 17 time.sleep(0.5)#等待0.5秒,确定点击的网页都打开 18 # 等待新页面打开 19 WebDriverWait(driver,20).until(EC.new_window_is_opened(handles)) 20 # 获得打开浏览器的句柄,返回的是列表 21 handles=driver.window_handles 22 print(handles) 23 # 切换到新的句柄 24 driver.switch_to.window(handles[-1]) 25 # 打印当前句柄 26 print(driver.current_window_handle) 27 # :Args: driver.switch_to.window(window_name) 28 # - window_name: The name or window handle of the window to switch to. 29 WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//div[@id='signstar_wrapper']//a[@title='签到']")))#等待元素出现 30 driver.find_element_by_xpath("//div[@id='signstar_wrapper']//a[@title='签到']").click() 31 WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.ID,"TANGRAM__PSP_11__footerULoginBtn"))) 32 driver.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn').click() 33 driver.find_element_by_id('TANGRAM__PSP_5__closeBtn').click()