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

Python+Selenium實(shí)現(xiàn)讀取網(wǎng)易郵箱驗(yàn)證碼

 更新時(shí)間:2022年03月11日 16:32:41   作者:佛系的老肖  
在自動(dòng)化工作中,有可能會(huì)遇到一些發(fā)送郵箱驗(yàn)證碼類似的功能。本文將利用Python?Selenium實(shí)現(xiàn)自動(dòng)化讀取網(wǎng)易郵箱驗(yàn)證碼,感興趣的可以了解一下

前面寫到了一些關(guān)于python+Selenium的基礎(chǔ)操作 的教程,這篇文章將講解一些實(shí)戰(zhàn)內(nèi)容。

在自動(dòng)化工作中,有可能會(huì)遇到一些發(fā)送郵箱驗(yàn)證碼類似的功能,如下

我們一般的解決思路就是 :

發(fā)送郵件—>打開郵箱—>輸入郵箱賬戶密碼—>登錄郵箱—>打開未讀郵件—>獲取驗(yàn)證碼—>保存驗(yàn)證碼—>讀取驗(yàn)證碼

以下是一個(gè)實(shí)現(xiàn)打開網(wǎng)易郵箱讀取未讀郵件獲取驗(yàn)證碼的代碼

    def wangyi(self,username, password, name):
        dr = webdriver.Edge()  # 打開另一個(gè)瀏覽器
        dr.maximize_window()  # 窗口最大化
        dr.get("https://mail.163.com/")  # 打開QQ郵箱
        time.sleep(2)
        iframe = dr.find_element(by="xpath",
                                     value="/html/body/div[2]/div[3]/div[1]/div/div[4]/div[1]/div[1]/iframe")
        dr.switch_to.frame(iframe)  # 切換至內(nèi)嵌頁(yè)面
        time.sleep(0.5)
        dr.find_element(by="name", value="email").clear()  # 清除內(nèi)容
        time.sleep(0.5)
        dr.find_element(by="name", value="email").send_keys(username)  # 輸入賬戶
        time.sleep(0.5)
        dr.find_element(by="name", value="password").clear()  # 清除內(nèi)容
        time.sleep(0.5)
        dr.find_element(by="name", value="password").send_keys(password)
        time.sleep(0.5)
        dr.find_element(by="id", value="dologin").click()  # 進(jìn)入郵箱首頁(yè)
        dr.switch_to.parent_frame()  # 切回父級(jí)頁(yè)面
        time.sleep(2)
        num = dr.find_element(By.CLASS_NAME, "gWel-mailInfo-status").text  # 獲取未讀郵件數(shù)量
        if int(num) > 0:
            print("存在未讀郵件")
            dr.find_element(By.ID, "gWel-animMailIcon").click()  # 點(diǎn)擊未讀郵件
            time.sleep(2)
            count = dr.find_elements(By.CLASS_NAME, "da0")
            print(len(count))  # 獲取存在的未讀郵件數(shù)量        從第三個(gè)da0開始為未讀郵件
            for i in range(1, len(count)):
                emailname = dr.find_elements(By.CLASS_NAME, "da0")[i].text  # 遍歷未讀郵件郵件名
                print(emailname)
                print(name)
                if emailname == name:  # 如果信息名為想匹配的賬戶名稱則執(zhí)行下一步操作
                    dr.find_element(By.CLASS_NAME, 'da0').click()  # 點(diǎn)擊郵件查看詳情
                    time.sleep(1)
                    iframe = dr.find_element(By.XPATH,
                                                 "/html/body/div[2]/div[1]/div[3]/div/div[1]/div[6]/div/iframe")  #
                    # 定位內(nèi)嵌頁(yè)面
                    dr.switch_to.frame(iframe)  # 切換到內(nèi)嵌頁(yè)面
                    time.sleep(1)
                    res = dr.find_element(By.CLASS_NAME,
                                              'netease_mail_readhtml.netease_mail_readhtml_webmail').text  # 獲取整個(gè)郵件信息
                    print(res)
                    dr.switch_to.parent_frame()  # 切回父級(jí)界面
                    self.code = re.findall(pattern="\d+", string=res)  # 使用正則表達(dá)式獲取郵箱驗(yàn)證碼
                    print(self.code)
                    break  # 獲取完成退出遍歷
        else:
            print('不存在未讀郵件')  # 如果沒(méi)有找到則打印沒(méi)有找到
        # dr.quit()  # 關(guān)閉瀏覽器

打開郵箱我們會(huì)發(fā)現(xiàn),登錄這一個(gè)小版塊是一個(gè)內(nèi)嵌頁(yè)面,所以一般的定位方法都會(huì)定位失敗,會(huì)報(bào)無(wú)法點(diǎn)擊到該元素,或者找不到該元素的錯(cuò)誤,這是我們就會(huì)用到dr.switch_to.frame(iframe) 切換至內(nèi)嵌頁(yè)面的方法,當(dāng)我們切換到內(nèi)嵌頁(yè)面的時(shí)候,就可以對(duì)內(nèi)嵌頁(yè)面中的元素進(jìn)行定位操作。但如果操作完成后希望到內(nèi)嵌頁(yè)面外進(jìn)行操作的話,就需要使用dr.switch_to.parent_frame() 把焦點(diǎn)切回父級(jí)界面。

進(jìn)入郵箱后,首先要判斷是否收到了郵件,所以通過(guò)未讀郵件右上角的角標(biāo)來(lái)判斷是否收到了郵件,如果收到了才進(jìn)行下一步操作,如果沒(méi)有收到則提示沒(méi)有收到郵件,當(dāng)然也可以優(yōu)化一下,設(shè)置一個(gè)循環(huán),定時(shí)多久查看一次,超過(guò)多少時(shí)間則報(bào)錯(cuò)。

這邊是用了text方法去獲取角標(biāo)文本進(jìn)行判斷,當(dāng)然獲取的文本是str 格式的,需要使用INT方法進(jìn)行轉(zhuǎn)為整型進(jìn)行判斷

num = dr.find_element(By.CLASS_NAME, "gWel-mailInfo-status").text  # 獲取未讀郵件數(shù)量
        if int(num) > 0:
            print("存在未讀郵件")
        else:
            print("未收到郵件")

判斷存在未讀郵件后,我們點(diǎn)入未讀郵件中,去查看未讀郵件信息,首先,我們要獲取未讀郵件文本信息進(jìn)行遍歷比對(duì),點(diǎn)進(jìn)去可以發(fā)現(xiàn),郵件的屬性可以使用Class_name進(jìn)行匹定位,但是一樣的Class_name有郵件數(shù)量+1個(gè),研究后發(fā)現(xiàn)第一封郵件的定位為第二個(gè),所以使用遍歷 for i in range(1, len(count)),從第二個(gè)元素開始,len(count)中的count指的是該元素,len(count)返回值為該元素的數(shù)量也就是郵件數(shù)量+1,

實(shí)現(xiàn)代碼:

            count = dr.find_elements(By.CLASS_NAME, "da0")
            print(len(count))  # 獲取存在的未讀郵件數(shù)量        從第三個(gè)da0開始為未讀郵件
            for i in range(1, len(count)):
                emailname = dr.find_elements(By.CLASS_NAME, "da0")[i].text  # 遍歷未讀郵件郵件名
                print(emailname)
                print(name)
                if emailname == name:  # 如果信息名為想匹配的賬戶名稱則執(zhí)行下一步操作
                    print("找到郵件執(zhí)行下一步")
                else:
                    print("未找到郵件")

找到郵件后需要獲取文本信息,可以觀察到,文本信息還是比較簡(jiǎn)單的,其中就只有驗(yàn)證碼是數(shù)字,所以使用簡(jiǎn)單的正則匹配可以輕松的將數(shù)字匹配出來(lái),值得注意的是,文本內(nèi)容也是一個(gè)內(nèi)嵌頁(yè)面,所以也需要切換焦點(diǎn)

具體實(shí)現(xiàn)代碼:

dr.find_element(By.CLASS_NAME, 'da0').click()  # 點(diǎn)擊郵件查看詳情
time.sleep(1)
iframe = dr.find_element(By.XPATH,"/html/body/div[2]/div[1]/div[3]/div/div[1]/div[6]/div/iframe")  
# 定位內(nèi)嵌頁(yè)面
dr.switch_to.frame(iframe)  # 切換到內(nèi)嵌頁(yè)面
time.sleep(1)
res = dr.find_element(By.CLASS_NAME, 'netease_mail_readhtml.netease_mail_readhtml_webmail').text  # 獲取整個(gè)郵件信息
print(res)
dr.switch_to.parent_frame()  # 切回父級(jí)界面
self.code = re.findall(pattern="\d+", string=res)  # 使用正則表達(dá)式獲取郵箱驗(yàn)證碼

返回結(jié)果:

因?yàn)榉祷亟Y(jié)果是一個(gè)列表,所以后續(xù)使用是需要使用code[0]取出

完整功能代碼:

import re
import time
from selenium import webdriver
from selenium.webdriver.common.by import By


"""
使用 Selenium 完成 通過(guò)驗(yàn)證碼修改密碼操作--網(wǎng)易郵箱在未讀郵件中獲取驗(yàn)證碼 

change_pwd 方法中:
password 登錄密碼
newpassword 新密碼
url : 網(wǎng)站地址 

wangyi 方法中:
username:郵箱賬戶
password:郵箱密碼
name:你期望匹配的郵件名字
"""


class Get_Code:

    def change_pwd(self,password,newpassword,url):
        driver = webdriver.Chrome()  # 打開瀏覽器
        driver.get(url)
        driver.maximize_window()  # 窗口最大化
        time.sleep(0.5)
        driver.find_element(by=By.XPATH, value="/html/body/div/div/div[1]/div/div[2]/div[3]/div[1]").click()  # 點(diǎn)擊登錄
        time.sleep(1)
        driver.find_element(by=By.ID, value="horizontal_login_userAccount").send_keys("selenium3366@163.com")  # 輸入登錄賬戶
        driver.find_element(by=By.ID, value="horizontal_login_password").send_keys(password)  # 輸入登錄密碼
        driver.find_element(by=By.CLASS_NAME, value="atn-btn-orange.ant-btn.ant-btn-lg.ant-btn-block").click()  # 點(diǎn)擊登錄
        time.sleep(2)
        driver.find_element(by=By.XPATH,
                            value="""http://*[@id="app"]/div/div[1]/div/div[2]/div[3]/div[1]""").click()  # 點(diǎn)擊頭像進(jìn)入個(gè)人中心
        time.sleep(2)
        driver.find_element(by=By.XPATH,
                            value="""http://*[@id="app"]/div/div[2]/div[1]/div[2]/div[3]""").click()  # 點(diǎn)擊change_password
        time.sleep(1)
        driver.find_element(by=By.XPATH, value="""http://*[@id="horizontal_login_newPassword"]""").send_keys(
            newpassword)  # 輸入新密碼
        driver.find_element(by=By.XPATH,
                            value="""http://*[@id="app"]/div/div/div[2]/form/div[2]/div/div/span/div/div[2]/a""").click()  # 點(diǎn)擊發(fā)送驗(yàn)證碼
        time.sleep(8)  # 等待驗(yàn)證碼發(fā)送到該郵箱

        self.wangyi(username="selenium3366", password="*******, name="okmarket賬戶信息更改")  # 調(diào)用方法獲取驗(yàn)證碼

        driver.find_element(by=By.XPATH, value=
        "/html/body/div[1]/div/div/div[2]/form/div[2]/div/div/span/div/div[1]/input").send_keys(
            self.code[0])  # 輸入驗(yàn)證碼
        time.sleep(0.5)
        driver.find_element(by=By.XPATH, value=
        """/html/body/div[1]/div/div/div[2]/form/div[3]/div/div/span/button""").click()  # 點(diǎn)擊按鈕
        time.sleep(1)
        text = driver.find_element(by=By.XPATH, value="""/html/body/div[2]/span/div/div/div/span""").text
        print(text)
        try:
            assert text == "password update success"        #斷言
            print("修改密碼成功")
        except:
            print("修改失敗")

    def wangyi(self,username, password, name):
        dr = webdriver.Edge()  # 打開另一個(gè)瀏覽器
        dr.maximize_window()  # 窗口最大化
        dr.get("https://mail.163.com/")  # 打開QQ郵箱
        time.sleep(2)
        iframe = dr.find_element(by="xpath",
                                     value="/html/body/div[2]/div[3]/div[1]/div/div[4]/div[1]/div[1]/iframe")
        dr.switch_to.frame(iframe)  # 切換至內(nèi)嵌頁(yè)面
        time.sleep(0.5)
        dr.find_element(by="name", value="email").clear()  # 清除內(nèi)容
        time.sleep(0.5)
        dr.find_element(by="name", value="email").send_keys(username)  # 輸入賬戶
        time.sleep(0.5)
        dr.find_element(by="name", value="password").clear()  # 清除內(nèi)容
        time.sleep(0.5)
        dr.find_element(by="name", value="password").send_keys(password)
        time.sleep(0.5)
        dr.find_element(by="id", value="dologin").click()  # 進(jìn)入郵箱首頁(yè)
        dr.switch_to.parent_frame()  # 切回父級(jí)頁(yè)面
        time.sleep(2)
        num = dr.find_element(By.CLASS_NAME, "gWel-mailInfo-status").text  # 獲取未讀郵件數(shù)量
        if int(num) > 0:
            print("存在未讀郵件")
            dr.find_element(By.ID, "gWel-animMailIcon").click()  # 點(diǎn)擊未讀郵件
            time.sleep(2)
            count = dr.find_elements(By.CLASS_NAME, "da0")
            print(len(count))  # 獲取存在的未讀郵件數(shù)量        從第三個(gè)da0開始為未讀郵件
            for i in range(1, len(count)):
                emailname = dr.find_elements(By.CLASS_NAME, "da0")[i].text  # 遍歷未讀郵件郵件名
                print(emailname)
                print(name)
                if emailname == name:  # 如果信息名為想匹配的賬戶名稱則執(zhí)行下一步操作
                    dr.find_element(By.CLASS_NAME, 'da0').click()  # 點(diǎn)擊郵件查看詳情
                    time.sleep(1)
                    iframe = dr.find_element(By.XPATH,
                                                 "/html/body/div[2]/div[1]/div[3]/div/div[1]/div[6]/div/iframe")  #
                    # 定位內(nèi)嵌頁(yè)面
                    dr.switch_to.frame(iframe)  # 切換到內(nèi)嵌頁(yè)面
                    time.sleep(1)
                    res = dr.find_element(By.CLASS_NAME,
                                              'netease_mail_readhtml.netease_mail_readhtml_webmail').text  # 獲取整個(gè)郵件信息
                    print(res)
                    dr.switch_to.parent_frame()  # 切回父級(jí)界面
                    self.code = re.findall(pattern="\d+", string=res)  # 使用正則表達(dá)式獲取郵箱驗(yàn)證碼
                    print(self.code)
                    break  # 獲取完成退出遍歷
        else:
            print('不存在未讀郵件')  # 如果沒(méi)有找到則打印沒(méi)有找到
        # dr.quit()  # 關(guān)閉瀏覽器


if __name__ == '__main__':
    a = Get_Code()
    a.change_pwd(password="a123456",newpassword="a1234567",url="*******")

完整效果演示:

以上就是Python+Selenium實(shí)現(xiàn)讀取網(wǎng)易郵箱驗(yàn)證碼的詳細(xì)內(nèi)容,更多關(guān)于Python Selenium讀取郵箱驗(yàn)證碼的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 簡(jiǎn)介Python的collections模塊中defaultdict類型的用法

    簡(jiǎn)介Python的collections模塊中defaultdict類型的用法

    這里我們來(lái)簡(jiǎn)介Python的collections模塊中defaultdict類型的用法,與內(nèi)置的字典類最大的不同在于初始化上,一起來(lái)看一下:
    2016-07-07
  • python3安裝webssh服務(wù)的操作方法

    python3安裝webssh服務(wù)的操作方法

    在Python中安裝webssh服務(wù),可以使用webssh庫(kù),下面給大家分享python3安裝webssh服務(wù)的操作方法,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 用Python生成HTML表格的方法示例

    用Python生成HTML表格的方法示例

    這篇文章主要介紹了用Python生成HTML表格的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python 字符串、列表、元組的截取與切片操作示例

    Python 字符串、列表、元組的截取與切片操作示例

    這篇文章主要介紹了Python 字符串、列表、元組的截取與切片操作,結(jié)合實(shí)例形式分析了Python針對(duì)字符串、列表、元組的截取與切片相關(guān)操作技巧,需要的朋友可以參考下
    2019-09-09
  • Python獲取文件夾下所有文件的方法教程

    Python獲取文件夾下所有文件的方法教程

    使用Python獲取文件夾下所有文件可采用os模塊或pathlib模塊,os模塊通過(guò)os.listdir和os.walk方法實(shí)現(xiàn)文件遍歷,而pathlib模塊通過(guò)Path類和其iterdir與rglob方法實(shí)現(xiàn),兩種方法各有優(yōu)勢(shì),可根據(jù)具體需求選擇使用,需要的朋友可以參考下
    2024-11-11
  • Python3.8安裝tensorflow的簡(jiǎn)單方法步驟

    Python3.8安裝tensorflow的簡(jiǎn)單方法步驟

    最近想要研究一下深度學(xué)習(xí)的應(yīng)用,于是翻了翻了社區(qū)的tensorflow安裝教程,所以下面這篇文章主要給大家介紹了關(guān)于Python3.8安裝tensorflow的簡(jiǎn)單方法步驟,需要的朋友可以參考下
    2022-06-06
  • PyTorch?模型?onnx?文件導(dǎo)出及調(diào)用詳情

    PyTorch?模型?onnx?文件導(dǎo)出及調(diào)用詳情

    這篇文章主要介紹了PyTorch模型onnx文件導(dǎo)出及調(diào)用詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • Django執(zhí)行指定腳本的幾種方法

    Django執(zhí)行指定腳本的幾種方法

    這篇文章主要給大家介紹了關(guān)于Django執(zhí)行指定腳本的幾種方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 解決torch.to(device)是否賦值的坑

    解決torch.to(device)是否賦值的坑

    這篇文章主要介紹了解決torch.to(device)是否賦值的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 一文帶你了解CNN(卷積神經(jīng)網(wǎng)絡(luò))

    一文帶你了解CNN(卷積神經(jīng)網(wǎng)絡(luò))

    CNN是神經(jīng)網(wǎng)絡(luò)中的一種,它的權(quán)值共享網(wǎng)絡(luò)結(jié)構(gòu)使之更類似于生物神經(jīng)網(wǎng)絡(luò),降低了網(wǎng)絡(luò)模型的復(fù)雜度,減少了權(quán)值的數(shù)量。本文主要講解了CNN(卷積神經(jīng)網(wǎng)絡(luò))的基礎(chǔ)內(nèi)容,想了解更多的小伙伴可以看一看這篇文章
    2021-09-09

最新評(píng)論

文登市| 东兰县| 安平县| 新闻| 永寿县| 吕梁市| 边坝县| 绍兴县| 施秉县| 阿拉尔市| 博乐市| 凤阳县| 大悟县| 平江县| 西安市| 河曲县| 天气| 油尖旺区| 沛县| 东台市| 芜湖县| 会同县| 汝南县| 上思县| 兰考县| 惠安县| 清徐县| 乐山市| 广昌县| 金华市| 喀喇| 澄江县| 巴南区| 莫力| 驻马店市| 玉屏| 晴隆县| 荣成市| 泾川县| 余姚市| 济源市|