Selenium2 + Python3.6實戰(四):彈出新頁面無法定位元素問題(Unable to locate element)--多窗口切換


最近學習到多窗口切換,在頁面操作過程中有時點擊某個鏈接會彈出新的窗口,這時需要先切換到新窗口才能對其進行操作。Webdriver提供了switch_to.window( ) 方法實現在不同窗口中切換。

查閱相關資料,得到兩種方法來定位到當前頁面:

方法一:

browser.switch_to_window(browser.window_handles[1])

方法二:直接定位當前最新彈出的窗口

for handle in browser.window_handles:#方法二,始終獲得當前最后的窗口,所以多要多次使用 browser.switch_to_window(handle)

方法一 VS 方法二

相比較於方法二,方法一的優點在於后續操作,比如關閉第幾個窗口,句柄傳遞是按照順序來的。缺點在於對於較多新頁面,有時候彈出窗口太多會變得難以計算。

而方法二,一直在獲取最后的窗口,如果你只是對最后的窗口進行操作,也就是(自己定義的)”前向“操作時,不計后果,可以直接拿來用,而且代碼不變。缺點在於,如果要返回到某個窗口句柄,那就顯得沒有方法一來的好。相對推薦使用方法一。

 

貼代碼

可以參照 http://blog.csdn.net/mrlevo520/article/details/51926145/ 獲得更多的解析。

#Author:哈士奇說喵 #因為搜索引擎檢索項根據熱度來排名,所以我只能對7.17的數據進行測試和負責,大家測試時候注意元素變化 #coding=utf-8 from selenium import webdriver import time browser=webdriver.Firefox() browser.get("http://cn.bing.com/") browser.find_element_by_name ('q').send_keys("MrLevo520 CSDN") time.sleep(1)
#----------操作一:進行對關鍵字MrLevo520 CSDN搜索---------- browser.find_element_by_id("sb_form_go").click()#執行此操作會進行搜索,但是沒有彈出新窗口,所以句柄不用重定位 time.sleep(3)
#----------操作二:對搜索頁面第一項進行點擊操作-------------- browser.find_element_by_xpath(".//*[@id='b_results']/li[1]/div[1]/h2/a").click()#進行當前頁面點擊第一項 time.sleep(3) #一定要加,會報錯
#----------操作三:對新彈出的頁面再點擊"我的頭像"選項--------- #注意此時已經是彈出的第一個窗口了,需要重新定位句柄 '''browser.switch_to_window(browser.window_handles[1])#方法一''' for handle in browser.window_handles:#方法二,始終獲得當前最后的窗口 browser.switch_to_window(handle) browser.find_element_by_xpath(".//*[@id='blog_userface']/a/img").click() #----------操作四:點擊"貢獻的資源"------------------------ #注意此時已經是新彈出的第二個窗口了,需要重新定位句柄 browser.switch_to_window(browser.window_handles[2])#方法一,注意window_handles[2]變成了2 '''for handle in browser.window_handles:#方法二,始終獲得當前最后的窗口 browser.switch_to_window(handle)''' browser.find_element_by_link_text ("貢獻的資源").click() time.sleep(3)
browser.quit( )

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM