前言
瀏覽器點擊web網站鏈接時,經常在當前窗口的基礎上打開另一個新的窗口。如下:
selenium定位新窗口元素,需要先切換到新窗口,再定位元素,否則會出現報錯“NoSuchElementException: Message: no such element...”
定位新窗口元素
1,獲得窗口句柄
driver.current_window_handle # 獲得當前窗口句柄
driver.window_handles # 獲得所有窗口句柄
2,切換至新窗口
all_pages = driver.window_handles # 獲得所有窗口句柄
driver.switch_to.window(all_pages[-1]) # 切換至最後一個窗口
3,定位元素
切換至新窗口後,正常定位元素即可
返回定位原有頁面
1,切換回原有頁面
all_pages = driver.window_handles # 獲得所有窗口句柄
driver.switch_to.window(all_pages[-1]) # 切換至最後一個窗口
2,定位元素
切換回原有窗口後,正常定位元素即可
實例
備註:以京東首頁-打開我的訂單窗口爲實例
1 # 京東定位新開窗元素實例
2 from selenium import webdriver
3 from time import sleep
4
5 driver = webdriver.Chrome()
6 driver.get('https://www.jd.com/') #打開京東
7 sleep(2)
8
9 driver.find_element_by_xpath('//*[text()="我的訂單"]').click() # 點擊我的訂單
10 sleep(3)
11
12 all_pages = driver.window_handles # 獲取所有窗口句柄
13 print("order page:", all_pages)
14
15 driver.switch_to.window(all_pages[-1]) # 切換至我的訂單窗口
16 bottom = driver.find_element_by_class_name("links").text # 獲得我的訂單頁-底欄文描
17 print("我的訂單-底欄:", bottom)
18 driver.close() # 關閉當前窗口-即我的訂單頁
19
20 driver.switch_to.window(all_pages[0])
21 driver.find_element_by_xpath('//*[contains(text(),"優惠券")]').click()