最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python?Selenium彈窗處理操作指南

 更新時間:2022年06月22日 09:05:45   作者:不怕貓的耗子A  
我們做項目經(jīng)常會遇到彈出框,下面這篇文章主要給大家介紹了關(guān)于Python?Selenium彈窗處理的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

HTML中的彈窗

1、在實際系統(tǒng)中,在完成某些操作時會彈出對話框來提示,主要分為"警告消息框","確認消息框","提示消息對話"三種類型的對話框

2、警告消息框:alert

 ?、啪嫦⒖蛱峁┝艘粋€"確定"按鈕讓用戶關(guān)閉該消息框,并且該消息框是模式對話框,也就是說用戶必須先關(guān)閉該消息框然后才能繼續(xù)進行操作

3、確認消息框(confirm)

    ⑴確認消息框向用戶提示一個"是與否"問題,用戶可以根據(jù)選擇"確定"按鈕和"取消"按鈕

4、提示消息對話(prompt)

 ?、盘崾鞠⒖蛱峁┝艘粋€文本字段,用戶可以在此字段輸入一個答案來響應(yīng)您的提示

       ⑵該消息框有一個"確定"按鈕和一個"取消"按鈕。選擇"確認"會響應(yīng)對應(yīng)的提示信息,選擇"取消"會關(guān)閉對話框

Selenium定位彈窗

1、在Selenium中如果只是簡單的對彈窗進行定位的話,是定位不到的

2、因為這種彈窗是不屬于HTML的元素的,它是屬于瀏覽器自帶的彈窗(是由JavaScript生成的),所以用定位元素的方法是定位不了的

    ⑴這類元素在使用F12選擇元素時,是選擇不到的

3、Selenium中的WebDriver對象提供了switch_to_alert()方法定位(捕獲)到各種彈窗(alert、confirm、prompt)

4、WebDriver對象在處理彈框時主要有以下幾種方法:

    ⑴switch_to_alert():定位彈出的對話框

    ⑵text:獲取對話框文本值

    ⑶accept():相當(dāng)于點擊"確認"

    ⑷dismiss():相當(dāng)于點擊"取消"

    ⑸send_keys():輸入值,該方法只能在prompt類彈框中使用

5、基本思路:先利用方法switch_to_alert()定位到alert等彈出框,再進行相應(yīng)的處理(確認、取消、輸入值)

    ⑴注意:對于三種類型的彈出框定位到彈出框的方法都一樣

alert

1、alert類彈出框應(yīng)該是實際中遇到最多的彈出框之一

例1:

import time
from selenium import webdriver
 
# 獲取瀏覽器對象
driver = webdriver.Chrome()
# 設(shè)置瀏覽器窗口大小
driver.maximize_window()
# 進入百度首頁
driver.get('https://www.baidu.com/')
# 進入百度設(shè)置頁面
driver.find_element_by_xpath("http://*[@id='s-usersetting-top']").click()
# 打開"搜索設(shè)置"
driver.find_element_by_xpath("http://*[@id='s-user-setting-menu']/div/a[1]").click()
time.sleep(1)
# 點擊保存設(shè)置
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)
# 打印對話框內(nèi)容
print(alter.text)
# 點擊對話框[確定]按鈕以關(guān)閉對話框
alter.accept()
time.sleep(2)
#關(guān)閉對話框后繼續(xù)操作頁面
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>
已經(jīng)記錄下您的使用偏好
"""

注:

1、在編輯器中寫switch_to_alert()方法時會出現(xiàn)橫線(刪除線),這個表示該方法太老了,后面可能會放棄使用

    ⑴因此我們還可以使用switch_to.alert方法

2、兩個方法稍微有點差距

    ⑴switch_to_alert():是類方法

    ⑵switch_to.alert:是類屬性

    ⑶但是兩者的返回值都是一樣的:都是一個alter對象

3、彈框肯定是在當(dāng)前Selenium指向的窗口中的(在同一頁面中),因此在關(guān)閉彈出框后,可繼續(xù)操作本頁面的元素

confirm

1、這種彈出框也是比較常見,但是在網(wǎng)上沒找到類似的彈出框,就寫了一個demo

例2:

<html>
<head>
<script type="text/javascript">
    function show_confirm()
        {
    var r=confirm("請問:您是否關(guān)注了我的博客?");
    }
</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()
# 設(shè)置瀏覽器窗口大小
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)
# 打印對話框內(nèi)容
print(alter.text)
# 點擊對話框[確定]按鈕以關(guān)閉對話框
# alter.accept()
# 點擊對話框[取消]按鈕以關(guān)閉對話框
alter.dismiss()
time.sleep(1)
#關(guān)閉對話框后繼續(xù)操作頁面
driver.find_element_by_id("kw").send_keys("不怕貓的耗子A")
 
"""
<selenium.webdriver.common.alert.Alert object at 0x0000028242C68DA0>
請問:您是否關(guān)注了我的博客?
"""

prompt

1、這種彈出框應(yīng)該很少,在網(wǎng)上沒找到類似的彈出框,就寫了一個demo

例4:

<html>
<head>
<script type="text/javascript">
    function disp_prompt()
    {
    var name=prompt("請問:您關(guān)注我的博客了嗎?")
     }
</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()
# 設(shè)置瀏覽器窗口大小
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)
# 打印對話框內(nèi)容
print(alter.text)
# 發(fā)送文字至對話框
alter.send_keys("不怕貓的耗子A")
time.sleep(2)
# 點擊對話框[確定]按鈕以關(guān)閉對話框
# alter.accept()
# 點擊對話框[取消]按鈕以關(guān)閉對話框
alter.dismiss()
time.sleep(1)
#關(guān)閉對話框后繼續(xù)操作頁面
driver.find_element_by_id("kw").send_keys("不怕貓的耗子A")
 
"""
注:在這個例子中感覺send_keys()沒啟作用(沒有發(fā)送文職到輸入框),不知道為什么
<selenium.webdriver.common.alert.Alert object at 0x0000018EDC058E48>
請問:您關(guān)注我的博客了嗎?
"""

其他方法

1、定位彈出框不僅可以使用上面的"switch_to.alert"和"switch_to_alert()"方法

2、還可以通過其他方法進行跳轉(zhuǎn)到alert

    ⑴這里需要用到Alert模塊,首先進行導(dǎo)入from selenium.webdriver.common.alert import Alert 

例6:

import time
from selenium import webdriver
from selenium.webdriver.common.alert import Alert
 
# 獲取瀏覽器對象
driver = webdriver.Chrome()
# 設(shè)置瀏覽器窗口大小
driver.maximize_window()
# 進入百度首頁
driver.get('https://www.baidu.com/')
# 進入百度設(shè)置頁面
driver.find_element_by_xpath("http://*[@id='s-usersetting-top']").click()
# 打開"搜索設(shè)置"
driver.find_element_by_xpath("http://*[@id='s-user-setting-menu']/div/a[1]").click()
time.sleep(1)
# 點擊保存設(shè)置
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
# 此時就會彈出alter類對話框,使用Alert定位到彈窗
time.sleep(2)
alter = Alert(driver)
# 打印對話框內(nèi)容
print(alter.text)
# 點擊對話框[確定]按鈕以關(guān)閉對話框
alter.accept()
time.sleep(2)
#關(guān)閉對話框后繼續(xù)操作頁面
driver.find_element_by_id("kw").send_keys("不怕貓的耗子A")

注:

1、alter = Alert(driver):相當(dāng)于是在當(dāng)前瀏覽器頁面中(WebDriver對象下)實例化了一個alter對象

判斷彈出框

1、執(zhí)行代碼過程中,可能會因為其他因素,網(wǎng)速慢等情況導(dǎo)致彈出框沒有出現(xiàn),我們可以通過判斷元素中判斷彈出框時否出現(xiàn)來進行操作

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()
# 設(shè)置瀏覽器窗口大小
driver.maximize_window()
# 進入百度首頁
driver.get('https://www.baidu.com/')
# 進入百度設(shè)置頁面
driver.find_element_by_xpath("http://*[@id='s-usersetting-top']").click()
# 打開"搜索設(shè)置"
driver.find_element_by_xpath("http://*[@id='s-user-setting-menu']/div/a[1]").click()
time.sleep(1)
# 點擊保存設(shè)置
driver.find_element_by_xpath('//*[@id="se-setting-7"]/a[2]').click()
# 此時就會彈出alter類對話框,使用Alert定位到彈窗
WebDriverWait(driver, 5).until(EC.alert_is_present())  # 等待5秒后判斷是否彈出窗口出現(xiàn)
"""
類似于
time.sleep(5)
result = EC.alert_is_present()(driver) #判斷是否有對話框,這里的寫法需要注意下
print(result)
if result:
    pass
else:
    print("未彈出對話框")
"""
alter = driver.switch_to.alert
# 打印對話框內(nèi)容
print(alter.text)
# 點擊對話框[確定]按鈕以關(guān)閉對話框
alter.accept()
time.sleep(2)
#關(guān)閉對話框后繼續(xù)操作頁面
driver.find_element_by_id("kw").send_keys("不怕貓的耗子A")

拓展

對話框

1、對話框:是不屬于HTML的元素的,它是屬于瀏覽器自帶的,用元素定位是定位不到的

2、在實際中一定要分清楚是否是對話框

3、比如點擊[登錄]按鈕,會彈出一個小面板(網(wǎng)頁層級之上的頁面)。這種不是對話框。而是網(wǎng)頁本身的一部分,這種是可以使用元素定位的

    ⑴比如前面例子中的"百度首頁的設(shè)置面板":點擊[設(shè)置]后彈出的小面板,這種是可以定位到的

例8:登錄粉筆網(wǎng)

import time
from selenium import webdriver
 
# 獲取瀏覽器對象
driver = webdriver.Chrome()
# 設(shè)置瀏覽器窗口大小
driver.maximize_window()
# 進入粉筆網(wǎng)
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()

總結(jié)

到此這篇關(guān)于Python Selenium彈窗處理的文章就介紹到這了,更多相關(guān)Python Selenium彈窗處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用Pygame實現(xiàn)時鐘效果

    Python使用Pygame實現(xiàn)時鐘效果

    這篇文章主要為大家詳細介紹了Python使用Pygame實現(xiàn)時鐘效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python 多模式字符串搜索 Aho-Corasick詳解

    Python 多模式字符串搜索 Aho-Corasick詳解

    Aho-Corasick 算法是一種用于精確或近似多模式字符串搜索的高效算法,本文給大家介紹Python 多模式字符串搜索 Aho-Corasick的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Python簡單計算文件夾大小的方法

    Python簡單計算文件夾大小的方法

    這篇文章主要介紹了Python簡單計算文件夾大小的方法,涉及Python針對目錄的遍歷與文件計算的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 詳解Python如何編寫類型提示

    詳解Python如何編寫類型提示

    為了提高代碼的可讀性、可維護性,Python 在 PEP 484 中引入了類型提示( type hinting),它是 Python 中一個可選但非常有用的功能,可以使代碼更易于閱讀和調(diào)試,下面我們就來學(xué)習(xí)一下如何編寫類型提示吧
    2023-12-12
  • python實現(xiàn)讀取excel文件中所有sheet操作示例

    python實現(xiàn)讀取excel文件中所有sheet操作示例

    這篇文章主要介紹了python實現(xiàn)讀取excel文件中所有sheet操作,涉及Python基于openpyxl模塊的Excel文件讀取、遍歷相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • Pandas 中的join函數(shù)應(yīng)用實現(xiàn)刪除多余的空行

    Pandas 中的join函數(shù)應(yīng)用實現(xiàn)刪除多余的空行

    這篇文章主要介紹了Pandas 中的join函數(shù)應(yīng)用實現(xiàn)刪除多余的空行,str.join也就是sequence要連接的元素序列,下面我們來看看他的作用實現(xiàn)刪除多余的空行,需要的小伙伴可以參考一下
    2022-02-02
  • python之js逆向功能演示詳解

    python之js逆向功能演示詳解

    這篇文章主要為大家介紹了python之js逆向功能演示詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • 使用Python模塊進行數(shù)據(jù)處理的詳細步驟

    使用Python模塊進行數(shù)據(jù)處理的詳細步驟

    Python 提供了豐富的模塊和庫,用于處理各種類型的數(shù)據(jù),本文介紹了一些常用的模塊和庫,以及如何使用它們進行數(shù)據(jù)處理的詳細步驟和代碼示例,對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2025-02-02
  • Win10?Anaconda?新建環(huán)境安裝python-pcl的步驟

    Win10?Anaconda?新建環(huán)境安裝python-pcl的步驟

    這篇文章主要介紹了Win10?Anaconda?新建環(huán)境安裝python-pcl的方法,至于VS環(huán)境下安裝C++?版本的pcl也可以按照此文提供的步驟安裝實現(xiàn),需要的朋友可以參考下
    2022-04-04
  • 安裝不同版本的tensorflow與models方法實現(xiàn)

    安裝不同版本的tensorflow與models方法實現(xiàn)

    這篇文章主要介紹了安裝不同版本的tensorflow與models方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02

最新評論

增城市| 英超| 肥西县| 岱山县| 泾源县| 龙岩市| 江川县| 宜宾市| 新源县| 辰溪县| 桐梓县| 彭水| 墨江| 五寨县| 宕昌县| 八宿县| 铁岭县| 水城县| 大关县| 积石山| 西乌珠穆沁旗| 长泰县| 昔阳县| 景泰县| 连州市| 西乡县| 龙海市| 康定县| 舟曲县| 茌平县| 汉沽区| 海阳市| 东乌| 沭阳县| 肥西县| 礼泉县| 和顺县| 泊头市| 馆陶县| 乾安县| 台东市|