當我們點擊某個鏈接時,切換換到另一個窗口,這時就需要跟隨切換到新打開的頁面,去定位元素。
1、獲取當前頁面句柄 current_window_handle
import time from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com") driver.maximize_window() handle = driver.current_window_handle # 獲取當前頁面句柄 print(handle) driver.quit()
2、當我們點擊了某個鏈接,打開新窗口時,這時取全部窗口的句柄 window_handles
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com") driver.maximize_window() driver.find_element_by_xpath('//*[@id="s-top-left"]/a[5]').click() # 點擊百度首頁的貼吧,新窗口 all_handles = driver.window_handles print(all_handles) driver.quit()
這里雖說開了新窗口,但是句柄還是在百度首頁,也就是說要在百度帖吧頁面的操作,元素的定位都是在百度首頁,這時就需要切換句柄,也就是切換到百度貼吧這個頁面。
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com") driver.maximize_window() handle = driver.current_window_handle print(handle) # 百度首頁的句柄 driver.find_element_by_xpath('//*[@id="s-top-left"]/a[5]').click() #切換到百度貼吧頁面 all_handles = driver.window_handles print(all_handles) # 獲取所有窗口的句柄 now_handle = driver.current_window_handle # 這個時候窗口已經切換到百度貼吧了,但是句柄還是百度首頁的 print(now_handle)
3、這時,句柄切換到百度貼吧頁面 , 這里有兩個方法,老版本的是 switch_to_window , 新版本的是 switch_to.window,(這里選擇我是用的新的,個人習慣)
需要穿一個參數,也就是句柄參數。
from selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.baidu.com") driver.maximize_window() handle = driver.current_window_handle print(handle) # 百度首頁的句柄 driver.find_element_by_xpath('//*[@id="s-top-left"]/a[5]').click() #切換到百度貼吧頁面 all_handles = driver.window_handles print(all_handles) # 獲取所有窗口的句柄 new_handles = all_handles[-1] # 從所有句柄的集合中,獲取最后那個,也就是最新的了 driver.switch_to.window(new_handles) # 然后當參數傳遞進來 now_handles = driver.current_window_handle # 查看現在的句柄 print(now_handles) driver.quit()
查看結果,可以看到句柄已經切換到新窗口
可以看到窗口句柄已經切換過來了,可以在新窗口操作元素了,快去試試吧。