網站首頁 編程語言 正文
HTML中的彈窗
1、在實際系統中,在完成某些操作時會彈出對話框來提示,主要分為"警告消息框","確認消息框","提示消息對話"三種類型的對話框
2、警告消息框:alert
?、啪嫦⒖蛱峁┝艘粋€"確定"按鈕讓用戶關閉該消息框,并且該消息框是模式對話框,也就是說用戶必須先關閉該消息框然后才能繼續進行操作
3、確認消息框(confirm)
?? ?⑴確認消息框向用戶提示一個"是與否"問題,用戶可以根據選擇"確定"按鈕和"取消"按鈕
4、提示消息對話(prompt)
?、盘崾鞠⒖蛱峁┝艘粋€文本字段,用戶可以在此字段輸入一個答案來響應您的提示
? ? ? ?⑵該消息框有一個"確定"按鈕和一個"取消"按鈕。選擇"確認"會響應對應的提示信息,選擇"取消"會關閉對話框
Selenium定位彈窗
1、在Selenium中如果只是簡單的對彈窗進行定位的話,是定位不到的
2、因為這種彈窗是不屬于HTML的元素的,它是屬于瀏覽器自帶的彈窗(是由JavaScript生成的),所以用定位元素的方法是定位不了的
?? ?⑴這類元素在使用F12選擇元素時,是選擇不到的
3、Selenium中的WebDriver對象提供了switch_to_alert()方法定位(捕獲)到各種彈窗(alert、confirm、prompt)
4、WebDriver對象在處理彈框時主要有以下幾種方法:
?? ?⑴switch_to_alert():定位彈出的對話框
?? ?⑵text:獲取對話框文本值
?? ?⑶accept():相當于點擊"確認"
?? ?⑷dismiss():相當于點擊"取消"
?? ?⑸send_keys():輸入值,該方法只能在prompt類彈框中使用
5、基本思路:先利用方法switch_to_alert()定位到alert等彈出框,再進行相應的處理(確認、取消、輸入值)
?? ?⑴注意:對于三種類型的彈出框定位到彈出框的方法都一樣
alert
1、alert類彈出框應該是實際中遇到最多的彈出框之一
例1:
import time
from selenium import webdriver
# 獲取瀏覽器對象
driver = webdriver.Chrome()
# 設置瀏覽器窗口大小
driver.maximize_window()
# 進入百度首頁
driver.get('https://www.baidu.com/')
# 進入百度設置頁面
driver.find_element_by_xpath("http://*[@id='s-usersetting-top']").click()
# 打開"搜索設置"
driver.find_element_by_xpath("http://*[@id='s-user-setting-menu']/div/a[1]").click()
time.sleep(1)
# 點擊保存設置
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
# 此時就會彈出alter類對話框,使用switch_to_alert()定位到彈窗
alter = driver.switch_to_alert()
print(alter)
print(driver.switch_to.alert)
# 打印對話框內容
print(alter.text)
# 點擊對話框[確定]按鈕以關閉對話框
alter.accept()
time.sleep(2)
#關閉對話框后繼續操作頁面
driver.find_element_by_id("kw").send_keys("不怕貓的耗子A")
"""
<selenium.webdriver.common.alert.Alert object at 0x000001EDE7BBA7F0>
<selenium.webdriver.common.alert.Alert object at 0x000001EDE7BC8D68>
已經記錄下您的使用偏好
"""
注:
1、在編輯器中寫switch_to_alert()方法時會出現橫線(刪除線),這個表示該方法太老了,后面可能會放棄使用
?? ?⑴因此我們還可以使用switch_to.alert方法
2、兩個方法稍微有點差距
?? ?⑴switch_to_alert():是類方法
?? ?⑵switch_to.alert:是類屬性
?? ?⑶但是兩者的返回值都是一樣的:都是一個alter對象
3、彈框肯定是在當前Selenium指向的窗口中的(在同一頁面中),因此在關閉彈出框后,可繼續操作本頁面的元素
confirm
1、這種彈出框也是比較常見,但是在網上沒找到類似的彈出框,就寫了一個demo
例2:
<html>
<head>
<script type="text/javascript">
function show_confirm()
{
var r=confirm("請問:您是否關注了我的博客?");
}
</script>
</head>
<body>
<center>
<input id="anjing" type="button" onclick="show_confirm()" value="點我,點我有驚喜!" />
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
</center>
</body>
</html>
例3:
import time
from selenium import webdriver
# 獲取瀏覽器對象
driver = webdriver.Chrome()
# 設置瀏覽器窗口大小
driver.maximize_window()
# 進入頁面
driver.get('C:\\Py_Demo\\Demo\\Py_Project\\demo.html')
# 點擊按鈕并彈出對話框
driver.find_element_by_id("mouse").click()
time.sleep(1)
# 定位對話框
alter = driver.switch_to.alert
print(alter)
# 打印對話框內容
print(alter.text)
# 點擊對話框[確定]按鈕以關閉對話框
# alter.accept()
# 點擊對話框[取消]按鈕以關閉對話框
alter.dismiss()
time.sleep(1)
#關閉對話框后繼續操作頁面
driver.find_element_by_id("kw").send_keys("不怕貓的耗子A")
"""
<selenium.webdriver.common.alert.Alert object at 0x0000028242C68DA0>
請問:您是否關注了我的博客?
"""
prompt
1、這種彈出框應該很少,在網上沒找到類似的彈出框,就寫了一個demo
例4:
<html>
<head>
<script type="text/javascript">
function disp_prompt()
{
var name=prompt("請問:您關注我的博客了嗎?")
}
</script>
</head>
<body>
<center>
<input id="mouse" type="button" onclick="disp_prompt()" value="點我,點我有驚喜" />
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
</center>
</body>
</html>
例5:
import time
from selenium import webdriver
# 獲取瀏覽器對象
driver = webdriver.Chrome()
# 設置瀏覽器窗口大小
driver.maximize_window()
# 進入頁面
driver.get('C:\\Py_Demo\\Demo\\Py_Project\\demo.html')
# 點擊按鈕并彈出對話框
driver.find_element_by_id("mouse").click()
time.sleep(1)
# 定位對話框
alter = driver.switch_to.alert
print(alter)
# 打印對話框內容
print(alter.text)
# 發送文字至對話框
alter.send_keys("不怕貓的耗子A")
time.sleep(2)
# 點擊對話框[確定]按鈕以關閉對話框
# alter.accept()
# 點擊對話框[取消]按鈕以關閉對話框
alter.dismiss()
time.sleep(1)
#關閉對話框后繼續操作頁面
driver.find_element_by_id("kw").send_keys("不怕貓的耗子A")
"""
注:在這個例子中感覺send_keys()沒啟作用(沒有發送文職到輸入框),不知道為什么
<selenium.webdriver.common.alert.Alert object at 0x0000018EDC058E48>
請問:您關注我的博客了嗎?
"""
其他方法
1、定位彈出框不僅可以使用上面的"switch_to.alert"和"switch_to_alert()"方法
2、還可以通過其他方法進行跳轉到alert
?? ?⑴這里需要用到Alert模塊,首先進行導入from selenium.webdriver.common.alert import Alert?
例6:
import time
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
# 獲取瀏覽器對象
driver = webdriver.Chrome()
# 設置瀏覽器窗口大小
driver.maximize_window()
# 進入百度首頁
driver.get('https://www.baidu.com/')
# 進入百度設置頁面
driver.find_element_by_xpath("http://*[@id='s-usersetting-top']").click()
# 打開"搜索設置"
driver.find_element_by_xpath("http://*[@id='s-user-setting-menu']/div/a[1]").click()
time.sleep(1)
# 點擊保存設置
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
# 此時就會彈出alter類對話框,使用Alert定位到彈窗
time.sleep(2)
alter = Alert(driver)
# 打印對話框內容
print(alter.text)
# 點擊對話框[確定]按鈕以關閉對話框
alter.accept()
time.sleep(2)
#關閉對話框后繼續操作頁面
driver.find_element_by_id("kw").send_keys("不怕貓的耗子A")
注:
1、alter = Alert(driver):相當于是在當前瀏覽器頁面中(WebDriver對象下)實例化了一個alter對象
判斷彈出框
1、執行代碼過程中,可能會因為其他因素,網速慢等情況導致彈出框沒有出現,我們可以通過判斷元素中判斷彈出框時否出現來進行操作
2、具體方法是使用Selenium中的"顯示等待"和判"斷元素是否存在"的方法
?? ?⑴至于這兩個知識點,后面會單獨介紹,這里了解下就好了
例7:
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 獲取瀏覽器對象
driver = webdriver.Chrome()
# 設置瀏覽器窗口大小
driver.maximize_window()
# 進入百度首頁
driver.get('https://www.baidu.com/')
# 進入百度設置頁面
driver.find_element_by_xpath("http://*[@id='s-usersetting-top']").click()
# 打開"搜索設置"
driver.find_element_by_xpath("http://*[@id='s-user-setting-menu']/div/a[1]").click()
time.sleep(1)
# 點擊保存設置
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
# 此時就會彈出alter類對話框,使用Alert定位到彈窗
WebDriverWait(driver, 5).until(EC.alert_is_present()) # 等待5秒后判斷是否彈出窗口出現
"""
類似于
time.sleep(5)
result = EC.alert_is_present()(driver) #判斷是否有對話框,這里的寫法需要注意下
print(result)
if result:
pass
else:
print("未彈出對話框")
"""
alter = driver.switch_to.alert
# 打印對話框內容
print(alter.text)
# 點擊對話框[確定]按鈕以關閉對話框
alter.accept()
time.sleep(2)
#關閉對話框后繼續操作頁面
driver.find_element_by_id("kw").send_keys("不怕貓的耗子A")
拓展
對話框
1、對話框:是不屬于HTML的元素的,它是屬于瀏覽器自帶的,用元素定位是定位不到的
2、在實際中一定要分清楚是否是對話框
3、比如點擊[登錄]按鈕,會彈出一個小面板(網頁層級之上的頁面)。這種不是對話框。而是網頁本身的一部分,這種是可以使用元素定位的
?? ?⑴比如前面例子中的"百度首頁的設置面板":點擊[設置]后彈出的小面板,這種是可以定位到的
例8:登錄粉筆網
import time
from selenium import webdriver
# 獲取瀏覽器對象
driver = webdriver.Chrome()
# 設置瀏覽器窗口大小
driver.maximize_window()
# 進入粉筆網
driver.get('https://fenbi.com/page/home')
# 點擊登錄按鈕
driver.find_element_by_xpath('//*[@id="headercontent"]/div[2]/div/div[1]').click()
# 輸入賬號
driver.find_element_by_xpath('//*[@id="fenbi-web-header"]/fb-header/div[2]/div/div[2]/div[1]/input').send_keys("賬號")
# 輸入密碼
driver.find_element_by_xpath('//*[@id="fenbi-web-header"]/fb-header/div[2]/div/div[2]/div[2]/input').send_keys("密碼")
# 點擊登錄按鈕
driver.find_element_by_xpath('//*[@id="fenbi-web-header"]/fb-header/div[2]/div/div[2]/div[4]/div/div').click()
總結
原文鏈接:https://blog.csdn.net/qq_39314932/article/details/123279659
相關推薦
- 2023-11-12 解決yolov3編譯中出現的問題:darknet make include/darknet.h:16
- 2022-07-21 UNION 和 UNION ALL的區別
- 2022-07-12 合理使用gateWay過濾器,實現Concroller自動注入用戶信息
- 2022-12-04 C++11中內聯函數(inline)用法實例_C 語言
- 2022-10-06 QT獲取顯示當前時間和日期的方法(用QTime,QDate和QDateTime)_C 語言
- 2022-05-13 python實現簡易圖書管理系統_python
- 2023-04-11 C#圖片處理如何生成縮略圖的實現_C#教程
- 2023-05-07 GO中什么情況會使用變量逃逸_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支