Python利用Selenium實現(xiàn)彈出框的處理
現(xiàn)如今經(jīng)常出現(xiàn)在網(wǎng)頁上的基于 JavaScript 實現(xiàn)的彈出框有三種,分別是 alert、confirm、prompt 。該章節(jié)主要是學習如何利用 selenium 處理這三種彈出框。奧利給,沖!
JavaScript三種彈出對話框的簡單介紹
JavaScript的三種對話框是通過調(diào)用 "window對象" 的三個方法 "alert()"、"confirm()" 、"prompt()" 來獲得,我們可以利用這些對話框來完成 "js" 的輸入和輸出,實現(xiàn)與用戶進行交互的js代碼。
下面就來簡單的了解一下這三種對話框吧。
alert() - 警告框
alert 是一個警告框,表現(xiàn)為直接彈出一個提示窗,該提示窗只有一個按鈕確定按鈕,點擊 確定 按鈕后無返回值;alert 警告框經(jīng)常被用于確保用戶可以得到某些信息。當警告框出現(xiàn)后,用戶需要點擊確定按鈕才能繼續(xù)進行操作。語法:alert("文本") 。
alert 警告框代碼示例如下:
<html>
<head>
<title>html頁面 - alert</title>
<a id="tooltip" href="#" data-toggle="tooltip" title="This is alert" onclick="alert(this.title);">點擊我,彈出 alert</a>
</head>
</html>

confirm() - 確認框
confirm 是確認框,它有兩個按鈕,確定 與 取消 ,返回 true 或 false 。確認框用于讓用戶可以驗證或者接受某些信息。當確認框出現(xiàn)后,用戶需要點擊確定或者取消按鈕才能繼續(xù)進行操作。如果用戶點擊確認,那么返回值為 true。如果用戶點擊取消,那么返回值為 false。 語法:confirm("文本")
confirm 確認框代碼示例如下:
<html>
<head>
<title>confirm</title>
</head>
<body>
執(zhí)行 "選擇" 后顯示的結(jié)果
<script language="JavaScript">
if(confirm("準備好了么?")){
alert("Go!");
}
else{
alert("Hold on!");
}
</script>
</body>
</html>

cprompt() - 提示框
prompt 是提示框,它會返回輸入框輸入的消息,或者其默認值;提示框經(jīng)常用于提示用戶在進入頁面前輸入某個值。當提示框出現(xiàn)后,用戶需要輸入某個值,然后點擊確認或取消按鈕才能繼續(xù)操縱。如果用戶點擊確認,那么返回值為輸入的值。如果用戶點擊取消,那么返回值為 null。語法:prompt("文本","默認值")
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 處理彈出對話框的常用方法
常用方法如下:
- text:返回
alert、confirm、prompt里面的文字信息 - accept:接受
- dismiss:取消
- send_keys:向
prompt里面輸入文字
selenium 處理 alert() 彈窗
本地 alert.html 彈窗頁面如下:

代碼示例如下:
# coding:utf-8
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver
driver.maximize_window() # Chrome 瀏覽器最大化
driver.get('file:///Users/workspace/WEB_TEST_HTML/alert.html') # 打開本地的 "alert.html" 文件
sleep(1)
driver.find_element_by_id('tooltip').click() # 點擊頁面 id='tooltip' 的元素(會彈出alert)
sleep(1)
alert = driver.switch_to.alert # 選擇 alert
print(alert.text) # 打印輸出 alert 的內(nèi)容
alert.accept() # 針對 alert 執(zhí)行 accept(接受)方法
sleep(2)
driver.quit()
運行結(jié)果如下:

selenium 處理 confirm() 彈窗
本地 confirm.html 彈窗頁面如下:

代碼示例如下:
# coding:utf-8
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver
driver.maximize_window() # Chrome 瀏覽器最大化
driver.get('file:///Users/workspace/WEB_TEST_HTML/confirm.html') # 打開本地的 "alert.html" 文件
sleep(1)
confirm = driver.switch_to.alert # 不管是 alert 還是 confirm、cprompt ,"switch_to" 的方式是一樣的。
print(confirm.text) # 打印輸出 "confirm" 的內(nèi)容
sleep(1)
confirm.dismiss() # 針對 confirm 執(zhí)行 dismiss(取消)方法
sleep(1)
alert = driver.switch_to.alert # 選擇 confirm 執(zhí)行 accept(接受)方法后的 alert
print(alert.text) # 打印輸出 alert 的內(nèi)容
sleep(1)
alert.accept() # 針對 alert 執(zhí)行 accept(接受)方法
sleep(1)
driver.quit()
運行結(jié)果如下:

上文的腳本中,我們通過 switch_to 的方法選擇 alert 略顯得麻煩一些,能不能直接通過 confirm 把它當成一個來處理呢?嘗試一下看看…
代碼示例如下:
# coding:utf-8
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver
driver.maximize_window() # Chrome 瀏覽器最大化
driver.get('file:///Users/workspace/WEB_TEST_HTML/confirm.html') # 打開本地的 "alert.html" 文件
sleep(1)
confirm = driver.switch_to.alert # 不管是 alert 還是 confirm、cprompt ,"switch_to" 的方式是一樣的。
print(confirm.text) # 打印輸出 "confirm" 的內(nèi)容
sleep(1)
confirm.dismiss() # 針對 confirm 執(zhí)行 dismiss(取消)方法
sleep(1)
print(confirm.text) # 打印輸出 alert 的內(nèi)容
sleep(1)
confirm.accept() # 針對 confirm 執(zhí)行 accept(接受)方法
sleep(1)
driver.quit()
運行結(jié)果如下:

從這里我們可以發(fā)現(xiàn),不管彈出多少個 alert ,都可以使用同一個 switch_to 的結(jié)果一起來做后續(xù)的操作,不需要不斷的去 switch_to 。因為它是一個系統(tǒng)組件,不管它是什么形態(tài),都可以這樣去支持。
selenium 處理 prompt() 彈窗
OK,接下來還剩下左后一個 彈窗組件 - prompt(),頁面如下,有一個輸入框,兩個按鈕,可以選擇確定或取消。

代碼示例如下:
# coding:utf-8
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome() # 啟動 Chrome瀏覽器的 driver
driver.maximize_window() # Chrome 瀏覽器最大化
driver.get('file:///Users/workspace/WEB_TEST_HTML/prompt.html') # 打開本地的 "alert.html" 文件
sleep(1)
prompt = driver.switch_to.alert
print(prompt.text)
sleep(1)
prompt.send_keys('Husky I love U') # "prompt.html" 文件默認輸入框里傳入的是 "Husky" ,這里我們傳入 "Husky I love U"
prompt.accept()
sleep(1)
driver.quit()
運行結(jié)果如下:

從上面的動圖中我們可以看到打印輸出的內(nèi)容并沒有我們輸入的內(nèi)容,與之前文章的 send_keys 不一樣,這是因為它是 JavaScript 原生的東西。既然是原生的組件,我們是看不到它的輸入過程的,只能是通過 webdriver 來控制它的底層來改變輸入的元素內(nèi)容。所以雖然輸入正確,返回也正確,但是在過程中是看不出來的。
以上就是Python利用Selenium實現(xiàn)彈出框的處理的詳細內(nèi)容,更多關(guān)于Python Selenium彈出框的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
django ModelForm修改顯示縮略圖 imagefield類型的實例
今天小編就為大家分享一篇django ModelForm修改顯示縮略圖 imagefield類型的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
python 循環(huán)讀取txt文檔 并轉(zhuǎn)換成csv的方法
今天小編就為大家分享一篇python 循環(huán)讀取txt文檔 并轉(zhuǎn)換成csv的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
機器學習python實戰(zhàn)之手寫數(shù)字識別
這篇文章主要為大家詳細介紹了機器學習python實戰(zhàn)之手寫數(shù)字識別,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
Python3.13?+Pycharm?開發(fā)環(huán)境配置
本文全面解釋了如何配置Python3.13和PyCharm的開發(fā)環(huán)境,適合初學者,詳細介紹了Python安裝步驟、選擇解釋器、常用快捷鍵和推薦插件,強調(diào)了虛擬環(huán)境的重要性,以及如何使用PyCharm進行高效開發(fā),感興趣的可以了解一下2024-11-11
在Django model中設(shè)置多個字段聯(lián)合唯一約束的實例
今天小編就為大家分享一篇在Django model中設(shè)置多個字段聯(lián)合唯一約束的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07

