广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python+Selenium实现读取网易邮箱验证码
  • 402
分享到

怎么用Python+Selenium实现读取网易邮箱验证码

2023-06-29 11:06:54 402人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要为大家展示了“怎么用python+selenium实现读取网易邮箱验证码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用Python+Selenium实现读取网易邮箱验证码”这篇

这篇文章主要为大家展示了“怎么用python+selenium实现读取网易邮箱验证码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用Python+Selenium实现读取网易邮箱验证码”这篇文章吧。

自动化工作中,有可能会遇到一些发送邮箱验证码类似的功能,如下

怎么用Python+Selenium实现读取网易邮箱验证码

我们一般的解决思路就是 :

发送邮件—>打开邮箱—>输入邮箱账户密码—>登录邮箱—>打开未读邮件—>获取验证码—>保存验证码—>读取验证码

以下是一个实现打开网易邮箱读取未读邮件获取验证码的代码

    def wangyi(self,username, passWord, name):        dr = WEBdriver.Edge()  # 打开另一个浏览器        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)  # 切换至内嵌页面        time.sleep(0.5)        dr.find_element(by="name", value="email").clear()  # 清除内容        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()  # 清除内容        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()  # 进入邮箱首页        dr.switch_to.parent_frame()  # 切回父级页面        time.sleep(2)        num = dr.find_element(By.CLASS_NAME, "gWel-mailInfo-status").text  # 获取未读邮件数量        if int(num) > 0:            print("存在未读邮件")            dr.find_element(By.ID, "gWel-animMailIcon").click()  # 点击未读邮件            time.sleep(2)            count = dr.find_elements(By.CLASS_NAME, "da0")            print(len(count))  # 获取存在的未读邮件数量        从第三个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:  # 如果信息名为想匹配的账户名称则执行下一步操作                    dr.find_element(By.CLASS_NAME, 'da0').click()  # 点击邮件查看详情                    time.sleep(1)                    iframe = dr.find_element(By.XPATH,                                                 "/html/body/div[2]/div[1]/div[3]/div/div[1]/div[6]/div/iframe")  #                    # 定位内嵌页面                    dr.switch_to.frame(iframe)  # 切换到内嵌页面                    time.sleep(1)                    res = dr.find_element(By.CLASS_NAME,                                              'netease_mail_readhtml.netease_mail_readhtml_webmail').text  # 获取整个邮件信息                    print(res)                    dr.switch_to.parent_frame()  # 切回父级界面                    self.code = re.findall(pattern="\d+", string=res)  # 使用正则表达式获取邮箱验证码                    print(self.code)                    break  # 获取完成退出遍历        else:            print('不存在未读邮件')  # 如果没有找到则打印没有找到        # dr.quit()  # 关闭浏览器

打开邮箱我们会发现,登录这一个小版块是一个内嵌页面,所以一般的定位方法都会定位失败,会报无法点击到该元素,或者找不到该元素的错误,这是我们就会用到dr.switch_to.frame(iframe) 切换至内嵌页面的方法,当我们切换到内嵌页面的时候,就可以对内嵌页面中的元素进行定位操作。但如果操作完成后希望到内嵌页面外进行操作的话,就需要使用dr.switch_to.parent_frame() 把焦点切回父级界面。

怎么用Python+Selenium实现读取网易邮箱验证码

进入邮箱后,首先要判断是否收到了邮件,所以通过未读邮件右上角的角标来判断是否收到了邮件,如果收到了才进行下一步操作,如果没有收到则提示没有收到邮件,当然也可以优化一下,设置一个循环,定时多久查看一次,超过多少时间则报错。

怎么用Python+Selenium实现读取网易邮箱验证码

这边是用了text方法去获取角标文本进行判断,当然获取的文本是str 格式的,需要使用INT方法进行转为整型进行判断

num = dr.find_element(By.CLASS_NAME, "gWel-mailInfo-status").text  # 获取未读邮件数量        if int(num) > 0:            print("存在未读邮件")        else:            print("未收到邮件")

判断存在未读邮件后,我们点入未读邮件中,去查看未读邮件信息,首先,我们要获取未读邮件文本信息进行遍历比对,点进去可以发现,邮件的属性可以使用Class_name进行匹定位,但是一样的Class_name有邮件数量+1个,研究后发现第一封邮件的定位为第二个,所以使用遍历 for i in range(1, len(count)),从第二个元素开始,len(count)中的count指的是该元素,len(count)返回值为该元素的数量也就是邮件数量+1,

怎么用Python+Selenium实现读取网易邮箱验证码

实现代码:

            count = dr.find_elements(By.CLASS_NAME, "da0")            print(len(count))  # 获取存在的未读邮件数量        从第三个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:  # 如果信息名为想匹配的账户名称则执行下一步操作                    print("找到邮件执行下一步")                else:                    print("未找到邮件")

找到邮件后需要获取文本信息,可以观察到,文本信息还是比较简单的,其中就只有验证码是数字,所以使用简单的正则匹配可以轻松的将数字匹配出来,值得注意的是,文本内容也是一个内嵌页面,所以也需要切换焦点

怎么用Python+Selenium实现读取网易邮箱验证码

具体实现代码:

dr.find_element(By.CLASS_NAME, 'da0').click()  # 点击邮件查看详情time.sleep(1)iframe = dr.find_element(By.XPATH,"/html/body/div[2]/div[1]/div[3]/div/div[1]/div[6]/div/iframe")  # 定位内嵌页面dr.switch_to.frame(iframe)  # 切换到内嵌页面time.sleep(1)res = dr.find_element(By.CLASS_NAME, 'netease_mail_readhtml.netease_mail_readhtml_webmail').text  # 获取整个邮件信息print(res)dr.switch_to.parent_frame()  # 切回父级界面self.code = re.findall(pattern="\d+", string=res)  # 使用正则表达式获取邮箱验证码

返回结果:

怎么用Python+Selenium实现读取网易邮箱验证码

因为返回结果是一个列表,所以后续使用是需要使用code[0]取出

完整功能代码:

import reimport timefrom selenium import webdriverfrom selenium.webdriver.common.by import By"""使用 Selenium 完成 通过验证码修改密码操作--网易邮箱在未读邮件中获取验证码 change_pwd 方法中:password 登录密码newpassword 新密码url : 网站地址 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()  # 点击登录        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()  # 点击登录        time.sleep(2)        driver.find_element(by=By.XPATH,                            value="""//*[@id="app"]/div/div[1]/div/div[2]/div[3]/div[1]""").click()  # 点击头像进入个人中心        time.sleep(2)        driver.find_element(by=By.XPATH,                            value="""//*[@id="app"]/div/div[2]/div[1]/div[2]/div[3]""").click()  # 点击change_password        time.sleep(1)        driver.find_element(by=By.XPATH, value="""//*[@id="horizontal_login_newPassword"]""").send_keys(            newpassword)  # 输入新密码        driver.find_element(by=By.XPATH,                            value="""//*[@id="app"]/div/div/div[2]/fORM/div[2]/div/div/span/div/div[2]/a""").click()  # 点击发送验证码        time.sleep(8)  # 等待验证码发送到该邮箱        self.wangyi(username="selenium3366", password="*******, name="okmarket账户信息更改")  # 调用方法获取验证码        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])  # 输入验证码        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()  # 点击按钮        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()  # 打开另一个浏览器        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)  # 切换至内嵌页面        time.sleep(0.5)        dr.find_element(by="name", value="email").clear()  # 清除内容        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()  # 清除内容        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()  # 进入邮箱首页        dr.switch_to.parent_frame()  # 切回父级页面        time.sleep(2)        num = dr.find_element(By.CLASS_NAME, "gWel-mailInfo-status").text  # 获取未读邮件数量        if int(num) > 0:            print("存在未读邮件")            dr.find_element(By.ID, "gWel-animMailIcon").click()  # 点击未读邮件            time.sleep(2)            count = dr.find_elements(By.CLASS_NAME, "da0")            print(len(count))  # 获取存在的未读邮件数量        从第三个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:  # 如果信息名为想匹配的账户名称则执行下一步操作                    dr.find_element(By.CLASS_NAME, 'da0').click()  # 点击邮件查看详情                    time.sleep(1)                    iframe = dr.find_element(By.XPATH,                                                 "/html/body/div[2]/div[1]/div[3]/div/div[1]/div[6]/div/iframe")  #                    # 定位内嵌页面                    dr.switch_to.frame(iframe)  # 切换到内嵌页面                    time.sleep(1)                    res = dr.find_element(By.CLASS_NAME,                                              'netease_mail_readhtml.netease_mail_readhtml_webmail').text  # 获取整个邮件信息                    print(res)                    dr.switch_to.parent_frame()  # 切回父级界面                    self.code = re.findall(pattern="\d+", string=res)  # 使用正则表达式获取邮箱验证码                    print(self.code)                    break  # 获取完成退出遍历        else:            print('不存在未读邮件')  # 如果没有找到则打印没有找到        # dr.quit()  # 关闭浏览器if __name__ == '__main__':    a = Get_Code()    a.change_pwd(password="a123456",newpassword="a1234567",url="*******")

完整效果演示:

怎么用Python+Selenium实现读取网易邮箱验证码

以上是“怎么用Python+Selenium实现读取网易邮箱验证码”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网Python频道!

--结束END--

本文标题: 怎么用Python+Selenium实现读取网易邮箱验证码

本文链接: https://www.lsjlt.com/news/324574.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python+Selenium实现读取网易邮箱验证码
    前面写到了一些关于python+Selenium的基础操作 的教程,这篇文章将讲解一些实战内容。 在自动化工作中,有可能会遇到一些发送邮箱验证码类似的功能,如下 我们一般的解决思路...
    99+
    2022-11-13
  • 怎么用Python+Selenium实现读取网易邮箱验证码
    这篇文章主要为大家展示了“怎么用Python+Selenium实现读取网易邮箱验证码”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用Python+Selenium实现读取网易邮箱验证码”这篇...
    99+
    2023-06-29
  • 怎么利用node实现发送QQ邮箱验证码
    这篇文章主要介绍“怎么利用node实现发送QQ邮箱验证码”,在日常操作中,相信很多人在怎么利用node实现发送QQ邮箱验证码问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么利用node实现发送QQ邮箱验证码...
    99+
    2023-06-30
  • nodejs怎么实现发送邮箱验证码功能
    这篇文章主要讲解了“nodejs怎么实现发送邮箱验证码功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs怎么实现发送邮箱验证码功能”吧!1、使用模块:nodemailer安装:n...
    99+
    2023-06-30
  • 使用django怎么实现发送验证码注册邮箱
    这篇文章将为大家详细讲解有关使用django怎么实现发送验证码注册邮箱,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。视图代码lis = []#设置一个空列表用来存放发送的...
    99+
    2023-06-14
  • Python+Selenium+Pytesseract怎么实现图片验证码识别
    这篇文章给大家介绍Python+Selenium+Pytesseract怎么实现图片验证码识别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、selenium截取验证码import jsonfrom&nbs...
    99+
    2023-06-26
  • 怎么使用selenium+opencv实现滑块验证码的登陆
    本文小编为大家详细介绍“怎么使用selenium+opencv实现滑块验证码的登陆”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用selenium+opencv实现滑块验证码的登陆”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-07-06
  • 怎么用Python实现随机生成图片验证码
    本篇内容主要讲解“怎么用Python实现随机生成图片验证码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现随机生成图片验证码”吧!导入模块import random...
    99+
    2023-06-26
  • 怎么使用Python爬取网易云歌曲评论实现词云图
    这篇文章主要讲解了“怎么使用Python爬取网易云歌曲评论实现词云图”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python爬取网易云歌曲评论实现词云图”吧!环境使用Python ...
    99+
    2023-06-30
  • 如何在SpringBoot中使用Shiro怎么实现一个邮件验证码登录功能
    如何在SpringBoot中使用Shiro怎么实现一个邮件验证码登录功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。导入依赖(pom.xml)  &...
    99+
    2023-06-06
  • 使用python 怎么实现一个滑块验证码识别功能
    今天就跟大家聊聊有关使用python 怎么实现一个滑块验证码识别功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。普通滑动验证import timefrom se...
    99+
    2023-06-14
  • 在Android 中使用ContentObserver怎么获取短信验证码并实现自动填充
    在Android 中使用ContentObserver怎么获取短信验证码并实现自动填充?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。步骤:首先我使用了Conte...
    99+
    2023-05-31
    android contentobserver bs
  • 使用python爬虫怎么实现一个发送短信验证码功能
    本篇文章为大家展示了使用python爬虫怎么实现一个发送短信验证码功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。内联代码片。import timedef get_time()...
    99+
    2023-06-06
  • Java怎么实现开发网站注册、登录时经常需要用到短信验证码功能
    这篇文章主要讲解了“Java怎么实现开发网站注册、登录时经常需要用到短信验证码功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么实现开发网站注册、登录时经常需要用到短信验证码功能...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作