首先要肯定彈窗的類型:前端
(1)div彈窗web
(2)新標籤頁彈窗瀏覽器
(3)alert彈窗工具
一,div彈窗
div彈窗是瀏覽器中比較好定位的彈窗,定位的方法與普通的元素同樣。不過這裏會有一個坑,明明能夠找到這個按鈕,可是就是定位不到。這個就是由於當前有div彈窗彈出的時候,須要設置一下等待時間,等頁面元素加載完畢,再去作其餘操做。
這裏用百度登錄爲例子:ui
1 from selenium import webdriver 2 import time 3 4 def login_baidu(url,username,password): 5 driver.get(url) 6 driver.find_element_by_xpath('//*[@id="u1"]/a[7]').click() 7 time.sleep(2) 8 driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]').click() 9 time.sleep(2) # 彈窗出現後,使頁面等待2S 10 11 login_username = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__userName"]') 12 login_username.click() 13 login_username.send_keys(username) 14 15 login_passwork = driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__password"]') 16 login_passwork.click() 17 login_passwork.send_keys(password) 18 19 driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__submit"]').click() # 登錄按鈕 20 21 if __name__ == "__main__": 22 driver = webdriver.Firefox() 23 username = r'xxx@qq.com' 24 password = r'xxxx' 25 url = r'https://www.baidu.com' 26 login_baidu(url,username,password)
二,新標籤頁彈窗
新標籤頁彈窗,則須要進行窗口的切換。此處第一個窗口打開百度首頁,在打開一個新窗口打開京東首頁,在兩個窗口之間進行切換。切換到不一樣的窗口以後,就能夠用常規的方法進行元素的定位。url
1 from selenium import webdriver 2 import time 3 4 def open_window1(): 5 driver.get("https://www.baidu.com") 6 time.sleep(2) 7 8 def open_window2(): # 用JS的方法打開新窗口,模擬新標籤頁彈窗 9 js = "window.open('https://www.jd.com')" 10 driver.execute_script(js) 11 time.sleep(2) 12 13 def Switch_Window(): 14 handles = driver.window_handles 15 print("打印當前已打開的窗口:"+str(handles)) 16 while(1): # 在兩個窗口之間作切換動做 17 driver.switch_to.window(handles[0]) 18 time.sleep(5) 19 driver.switch_to.window(handles[1]) 20 time.sleep(5) 21 22 if __name__ == "__main__" : 23 driver = webdriver.Firefox() 24 open_window1() 25 open_window2() 26 Switch_Window()
handles = driver.window_handles # 獲取當前打開的全部窗口的句柄
driver.switch_to.window(handles[N]) # 切換到其中一個窗口
其中,獲取的句柄下標從0開始,即第一個窗口爲[0]、第二個窗口爲[1],如此類推。使用switch_to.window方法切換到新標籤頁後就能夠作其餘操做了。
spa
3、alert彈窗code
在WebDriver中處理JS所生成的alert、confirm以及prompt十分簡單,具體作法是使用switch_to.alert()方法定位到alert/confirm/prompt,而後使用text/accept/dismiss/send_keys等方法進行操做。orm
1.text:返回alert/confirm/prompt中的文字信息。blog
2.accept():接受現有警告框。
3.dismiss():解散現有警告框。
4.send_keys(keysToSend):發送文本至警告框。 keysToSend:將文本發送至警告框。
如圖所示,百度搜索設置彈出的窗口是不能經過前端工具對其進行定位的,這個時候就能夠經過switch_to.alert()方法接受這個彈窗。
代碼以下:
1 #導包 2 from selenium import webdriver 3 from selenium.webdriver.common.action_chains import ActionChains 4 from time import sleep 5 #定義瀏覽器句柄,打開百度網頁 6 driver=webdriver.Chrome() 7 driver.implicitly_wait(10) 8 url="http://www.baidu.com" 9 driver.get(url) 10 #鼠標懸停至"設置"鏈接 11 link=driver.find_element_by_link_text('設置') 12 ActionChains(driver).move_to_element(link).perform() 13 #打開搜索設置 14 driver.find_element_by_link_text('搜索設置').click() 15 #保存設置 16 sleep(2) 17 driver.find_element_by_xpath('//*[@id="gxszButton"]/a[1]').click() 18 sleep(3)19 #接受警告框 20 alert=driver.switch_to.alert 21 print(alert.text) 22 alert.accept() 23 #20和22行合併,能夠直接寫成: driver.switch_to.alert.accept() 24 sleep(2) 25 driver.quit()
------------------------------------------------------------------------------------------------
talk is cheap,show me the code.