Python利用Selenium實(shí)現(xiàn)彈出框的處理
現(xiàn)如今經(jīng)常出現(xiàn)在網(wǎng)頁(yè)上的基于 JavaScript 實(shí)現(xiàn)的彈出框有三種,分別是 alert、confirm、prompt
。該章節(jié)主要是學(xué)習(xí)如何利用 selenium 處理這三種彈出框。奧利給,沖!
JavaScript三種彈出對(duì)話框的簡(jiǎn)單介紹
JavaScript的三種對(duì)話框是通過(guò)調(diào)用 "window對(duì)象" 的三個(gè)方法 "alert()"、"confirm()" 、"prompt()" 來(lái)獲得,我們可以利用這些對(duì)話框來(lái)完成 "js" 的輸入和輸出,實(shí)現(xiàn)與用戶進(jìn)行交互的js代碼。
下面就來(lái)簡(jiǎn)單的了解一下這三種對(duì)話框吧。
alert() - 警告框
alert
是一個(gè)警告框,表現(xiàn)為直接彈出一個(gè)提示窗,該提示窗只有一個(gè)按鈕確定按鈕,點(diǎn)擊 確定 按鈕后無(wú)返回值;alert
警告框經(jīng)常被用于確保用戶可以得到某些信息。當(dāng)警告框出現(xiàn)后,用戶需要點(diǎn)擊確定按鈕才能繼續(xù)進(jìn)行操作。語(yǔ)法:alert("文本")
。
alert
警告框代碼示例如下:
<html> <head> <title>html頁(yè)面 - alert</title> <a id="tooltip" href="#" data-toggle="tooltip" title="This is alert" onclick="alert(this.title);">點(diǎn)擊我,彈出 alert</a> </head> </html>
confirm() - 確認(rèn)框
confirm
是確認(rèn)框,它有兩個(gè)按鈕,確定 與 取消 ,返回 true
或 false
。確認(rèn)框用于讓用戶可以驗(yàn)證或者接受某些信息。當(dāng)確認(rèn)框出現(xiàn)后,用戶需要點(diǎn)擊確定或者取消按鈕才能繼續(xù)進(jìn)行操作。如果用戶點(diǎn)擊確認(rèn),那么返回值為 true。如果用戶點(diǎn)擊取消,那么返回值為 false。 語(yǔ)法:confirm("文本")
confirm
確認(rèn)框代碼示例如下:
<html> <head> <title>confirm</title> </head> <body> 執(zhí)行 "選擇" 后顯示的結(jié)果 <script language="JavaScript"> if(confirm("準(zhǔn)備好了么?")){ alert("Go!"); } else{ alert("Hold on!"); } </script> </body> </html>
cprompt() - 提示框
prompt
是提示框,它會(huì)返回輸入框輸入的消息,或者其默認(rèn)值;提示框經(jīng)常用于提示用戶在進(jìn)入頁(yè)面前輸入某個(gè)值。當(dāng)提示框出現(xiàn)后,用戶需要輸入某個(gè)值,然后點(diǎn)擊確認(rèn)或取消按鈕才能繼續(xù)操縱。如果用戶點(diǎn)擊確認(rèn),那么返回值為輸入的值。如果用戶點(diǎn)擊取消,那么返回值為 null。語(yǔ)法:prompt("文本","默認(rèn)值")
prompt
提示框代碼示例如下:
<html> <head> </head> <body> <script language='JavaScript' type="text/javascript" > var aa= prompt("What's your name?","Husky");document.write("Welcome to my world, "+aa+"<br>") </script> </body> </html>
以上就是比較常用的三種彈出層的原生 JavaScript 組件。
selenium 處理彈出對(duì)話框的常用方法
常用方法如下:
- text:返回
alert、confirm、prompt
里面的文字信息 - accept:接受
- dismiss:取消
- send_keys:向
prompt
里面輸入文字
selenium 處理 alert() 彈窗
本地 alert.html
彈窗頁(yè)面如下:
代碼示例如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動(dòng) Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/alert.html') # 打開(kāi)本地的 "alert.html" 文件 sleep(1) driver.find_element_by_id('tooltip').click() # 點(diǎn)擊頁(yè)面 id='tooltip' 的元素(會(huì)彈出alert) sleep(1) alert = driver.switch_to.alert # 選擇 alert print(alert.text) # 打印輸出 alert 的內(nèi)容 alert.accept() # 針對(duì) alert 執(zhí)行 accept(接受)方法 sleep(2) driver.quit()
運(yùn)行結(jié)果如下:
selenium 處理 confirm() 彈窗
本地 confirm.html
彈窗頁(yè)面如下:
代碼示例如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動(dòng) Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/confirm.html') # 打開(kāi)本地的 "alert.html" 文件 sleep(1) confirm = driver.switch_to.alert # 不管是 alert 還是 confirm、cprompt ,"switch_to" 的方式是一樣的。 print(confirm.text) # 打印輸出 "confirm" 的內(nèi)容 sleep(1) confirm.dismiss() # 針對(duì) confirm 執(zhí)行 dismiss(取消)方法 sleep(1) alert = driver.switch_to.alert # 選擇 confirm 執(zhí)行 accept(接受)方法后的 alert print(alert.text) # 打印輸出 alert 的內(nèi)容 sleep(1) alert.accept() # 針對(duì) alert 執(zhí)行 accept(接受)方法 sleep(1) driver.quit()
運(yùn)行結(jié)果如下:
上文的腳本中,我們通過(guò) switch_to
的方法選擇 alert
略顯得麻煩一些,能不能直接通過(guò) confirm
把它當(dāng)成一個(gè)來(lái)處理呢?嘗試一下看看…
代碼示例如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動(dòng) Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/confirm.html') # 打開(kāi)本地的 "alert.html" 文件 sleep(1) confirm = driver.switch_to.alert # 不管是 alert 還是 confirm、cprompt ,"switch_to" 的方式是一樣的。 print(confirm.text) # 打印輸出 "confirm" 的內(nèi)容 sleep(1) confirm.dismiss() # 針對(duì) confirm 執(zhí)行 dismiss(取消)方法 sleep(1) print(confirm.text) # 打印輸出 alert 的內(nèi)容 sleep(1) confirm.accept() # 針對(duì) confirm 執(zhí)行 accept(接受)方法 sleep(1) driver.quit()
運(yùn)行結(jié)果如下:
從這里我們可以發(fā)現(xiàn),不管彈出多少個(gè) alert
,都可以使用同一個(gè) switch_to
的結(jié)果一起來(lái)做后續(xù)的操作,不需要不斷的去 switch_to
。因?yàn)樗且粋€(gè)系統(tǒng)組件,不管它是什么形態(tài),都可以這樣去支持。
selenium 處理 prompt() 彈窗
OK,接下來(lái)還剩下左后一個(gè) 彈窗組件 - prompt()
,頁(yè)面如下,有一個(gè)輸入框,兩個(gè)按鈕,可以選擇確定或取消。
代碼示例如下:
# coding:utf-8 from time import sleep from selenium import webdriver driver = webdriver.Chrome() # 啟動(dòng) Chrome瀏覽器的 driver driver.maximize_window() # Chrome 瀏覽器最大化 driver.get('file:///Users/workspace/WEB_TEST_HTML/prompt.html') # 打開(kāi)本地的 "alert.html" 文件 sleep(1) prompt = driver.switch_to.alert print(prompt.text) sleep(1) prompt.send_keys('Husky I love U') # "prompt.html" 文件默認(rèn)輸入框里傳入的是 "Husky" ,這里我們傳入 "Husky I love U" prompt.accept() sleep(1) driver.quit()
運(yùn)行結(jié)果如下:
從上面的動(dòng)圖中我們可以看到打印輸出的內(nèi)容并沒(méi)有我們輸入的內(nèi)容,與之前文章的 send_keys
不一樣,這是因?yàn)樗?JavaScript 原生的東西。既然是原生的組件,我們是看不到它的輸入過(guò)程的,只能是通過(guò) webdriver 來(lái)控制它的底層來(lái)改變輸入的元素內(nèi)容。所以雖然輸入正確,返回也正確,但是在過(guò)程中是看不出來(lái)的。
以上就是Python利用Selenium實(shí)現(xiàn)彈出框的處理的詳細(xì)內(nèi)容,更多關(guān)于Python Selenium彈出框的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用爬蟲(chóng)抓取美女圖片并保存到本地的方法【測(cè)試可用】
這篇文章主要介紹了Python使用爬蟲(chóng)抓取美女圖片并保存到本地的方法,涉及Python基于正則、爬蟲(chóng)實(shí)現(xiàn)的圖片抓取與保存相關(guān)操作技巧,需要的朋友可以參考下2018-08-08vue.js實(shí)現(xiàn)輸入框輸入值內(nèi)容實(shí)時(shí)響應(yīng)變化示例
這篇文章主要介紹了vue.js實(shí)現(xiàn)輸入框輸入值內(nèi)容實(shí)時(shí)響應(yīng)變化,結(jié)合實(shí)例形式分析了vue.js使用v-model屬性進(jìn)行數(shù)據(jù)綁定的相關(guān)操作技巧,需要的朋友可以參考下2018-07-07修復(fù) Django migration 時(shí)遇到的問(wèn)題解決
本篇文章主要介紹了修復(fù) Django migration 時(shí)遇到的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06用pickle存儲(chǔ)Python的原生對(duì)象方法
下面小編就為大家?guī)?lái)一篇用pickle存儲(chǔ)Python的原生對(duì)象方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04python3 實(shí)現(xiàn)的人人影視網(wǎng)站自動(dòng)簽到
這里給大家分享的是使用Python3結(jié)合計(jì)劃任務(wù),實(shí)現(xiàn)的人人影視網(wǎng)站自動(dòng)簽到功能的代碼,非常的實(shí)用,有需要的小伙伴可以參考下2016-06-06