Python+webdriver一勞永逸解決彈出框識別問題


彈出框有幾種類型,一般為alart, iframe, windows(包括可直接識別的div,還有不能能直接識別的),下面我們以百度首頁為例,看看這幾種彈出框如何識別。

假設現在要在百度首頁點擊登錄按鈕

等如下窗口彈出來后, 點擊qq圖標轉向qq登錄

然后,頁面會跳轉到第3方窗口,在里面選擇賬戶密碼登錄

然后在如下彈出框里輸入用戶名和密碼

我們直接代碼看下如何實現,注意,以下下代碼僅僅證明可行性,未作任何優化,工程代碼應該利用設計模式(PageObject)/分離元素和操作/封裝重用類/定義錯誤處理。

import time

from selenium import webdriver

#打開首頁,點擊登錄按鈕

d = webdriver.Chrome()

d.get("http://www.baidu.com")

d.find_element_by_xpath(".//*[@id='u1']/a[@name='tj_login']").click()

#jquery操作頁面元素,點擊qq賬戶登錄。

#1. 這是彈出框問題的終極解決辦法,一律用jquey直接操作頁面元素,然后通過腳本執行

js_script ='''$("#pass_phoenix_btn .phoenix-btn-item")[0].click()'''

time.sleep(2)

d.execute_script(js_script)

time.sleep(2)

#切換到qq登錄頁面,並打印出當前頁面以驗證正確性。

#2. switch_to.window允許你跟彈出頁面window交互。

for handle in d.window_handles:

d.switch_to.window(handle)

time.sleep(3)

print(d.current_url)

#分析頁面元素,看出最終的賬戶登錄是個iframe,找到這個iframe的id,切入到這個iframe,繼續執行操作。

#3. iframe也可以用switch_to.frame直接操作。

element = d.find_element_by_xpath(".//*[@id='combine_page']/div[1]")

d.switch_to.frame(element.find_element_by_id('ptlogin_iframe'))

d.find_element_by_xpath(".//*[@id='switcher_plogin']").click()


免責聲明!

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



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