前言
瀏覽器點擊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()