窗口切換,簡單來講就是在原來的頁面窗口下打開了一個新的窗口,須要要新的窗口中,去進行下一步的操做。web
所以 須要知道:ui
1)怎麼知道須要切換到哪一個窗口?spa
2)代碼程序怎麼知道哪一個窗口是新的窗口?code
步驟:blog
1)獲得目前打開的全部窗口。element
這裏要引入句柄的概念,每一個窗口都有一個句柄。get
全部窗口顯示集合是一個列表。其順序是:先出現的,先追加到列表;新的窗口,在列表的最後。selenium
即最早打開的窗口,在列表第一個;it
# 獲取全部的窗口句柄 wins = driver.window_handles print(wins)
2)切換到新窗口io
# 切換到新的窗口 driver.switch_to.window(wins[-1]) print("切換以後的句柄:",driver.current_window_handle)
3)在新的窗口裏,定位元素操做元素
示例:
這裏以在百度中輸入「」搜索selenium webdriver「」,並在搜索結果中找到官網(切換到官網窗口),執行下載文件操做。
代碼以下:
1 import time 2 from selenium import webdriver 3 from selenium.webdriver.common.by import By 4 from selenium.webdriver.support.wait import WebDriverWait 5 from selenium.webdriver.support import expected_conditions as EC 6 7 # 一、打開訪問百度 8 driver = webdriver.Chrome() 9 driver.maximize_window() 10 driver.get("https://www.baidu.com/") 11 12 # 二、在百度首頁輸入框中輸入selenium webdriver 13 # 1)定位到百度首頁輸入框:根據ID定位 14 # 2)在輸入框中輸入:selenium webdriver 15 # 3)點擊百度一下:根據ID定位,後加點擊操做_click() 16 element = driver.find_element_by_id("kw") 17 element.send_keys("selenium webdriver") 18 driver.find_element_by_id("su").click() 19 20 # 三、在搜索到的頁面結果中找到 - SeleniumHQ Browser Automation 21 loc =(By.XPATH, '//a[text()=" - SeleniumHQ Browser Automation"]') 22 # 使用隱性等待10秒,構建使得loc元素是可見的 23 WebDriverWait(driver,20).until(EC.visibility_of_element_located(loc)) 24 # 觸發新的窗口出現:找到 - SeleniumHQ Browser Automation元素後,點擊跳轉到先窗口 25 driver.find_element_by_xpath('//a[text()=" - SeleniumHQ Browser Automation"]').click() 26 # 強制等待1秒 27 time.sleep(1) 28 29 # 四、獲取全部的窗口句柄 30 wins = driver.window_handles 31 print(wins) 32 33 # 五、獲取本身當前所在的窗口句柄 34 print(driver.current_window_handle) 35 36 # 六、切換到新的窗口 37 driver.switch_to.window(wins[-1]) 38 print("切換以後的句柄:",driver.current_window_handle) 39 40 # 七、在新的窗口等待查找的元素,並對元素進行點擊操做 41 loc2 = (By.XPATH,'//div[@class="download-button webdriver"]') 42 WebDriverWait(driver,15).until(EC.visibility_of_element_located(loc2)) 43 driver.find_element(*loc2).click() 44 45 # 八、退出會話 46 time.sleep(5) 47 driver.quit()