用python 实现自动登录带验证码的163邮箱,并发送一封邮件给a.163.com

时间: 2023-06-27 18:08:07 浏览: 65
这个任务需要用到 Python 的 requests、selenium 和 smtplib 库。下面给出一个简单的实现步骤: 1. 安装相应的库。可以通过 pip install requests、pip install selenium 和 pip install smtplib 命令进行安装。 2. 使用 requests 库模拟登录 163 邮箱。首先需要获取登录页面的 URL,并发送 GET 请求获取页面的 HTML 代码。然后从 HTML 代码中解析出登录所需的参数,如用户名和密码等。接下来,使用 POST 请求模拟登录即可。 3. 对于带验证码的登录,可以使用 selenium 库模拟浏览器操作。首先需要下载对应浏览器的驱动程序,如 Chrome 的驱动程序 chromedriver。然后启动浏览器并访问登录页面,手动填写用户名和密码,并等待验证码出现。此时可以通过代码截取验证码图片,并使用第三方库如 pytesseract 进行识别,从而自动填写验证码。 4. 登录成功后,可以使用 requests 库发送一封邮件。首先需要获取发件人的邮箱地址和 SMTP 服务器地址,然后登录邮箱并发送邮件。 下面是一个示例代码,仅供参考: ```python import requests from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import smtplib from email.mime.text import MIMEText from email.header import Header # 登录 163 邮箱 def login_163(username, password): # 获取登录页面的 URL url = 'https://mail.163.com/' r = requests.get(url) # 从 HTML 代码中解析出登录所需的参数 lt_pos = r.text.find('lt=') + 3 lt = r.text[lt_pos:lt_pos+56] dllt = r.text[r.text.find('dllt=') + 5:r.text.find('lt=') - 1] execution_pos = r.text.find('execution=') + 10 execution = r.text[execution_pos:execution_pos+4] _eventId = 'submit' rmShown = 1 # 构造登录请求的参数 data = { 'username': username, 'password': password, 'lt': lt, 'dllt': dllt, 'execution': execution, '_eventId': _eventId, 'rmShown': rmShown } # 发送登录请求 session = requests.session() session.post(url, data=data) return session # 使用 selenium 登录 163 邮箱(带验证码) def login_163_with_captcha(username, password): # 启动 Chrome 浏览器并访问登录页面 driver = webdriver.Chrome() driver.get('https://mail.163.com/') # 填写用户名和密码,并等待验证码出现 driver.find_element_by_name('email').send_keys(username) driver.find_element_by_name('password').send_keys(password) ActionChains(driver).move_to_element(driver.find_element_by_id('dom_id1')).click().perform() driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@id="loginIframe"]')) driver.find_element_by_name('verifyCode').click() # 截取验证码图片并使用 pytesseract 进行识别 captcha = driver.find_element_by_xpath('//img[@class="jigsaw"]') captcha.screenshot('captcha.png') # TODO: 使用 pytesseract 进行验证码识别并自动填写 # 点击登录按钮 driver.find_element_by_id('dologin').click() # 等待登录完成 driver.implicitly_wait(3) return driver # 发送邮件 def send_email(session, from_addr, to_addr, subject, content): # 获取发件人的邮箱地址和 SMTP 服务器地址 from_addr = from_addr smtp_server = 'smtp.163.com' # 登录邮箱 session.get('https://mail.163.com/') session.get('https://mail.163.com/js6/main.jsp?sid=' + session.cookies['Coremail.sid']) session.get('https://mail.163.com/js6/s?sid=' + session.cookies['Coremail.sid'] + '&func=mbox:compose') # 构造邮件内容 message = MIMEText(content, 'plain', 'utf-8') message['From'] = Header(from_addr, 'utf-8') message['To'] = Header(to_addr, 'utf-8') message['Subject'] = Header(subject, 'utf-8') # 发送邮件 smtp = smtplib.SMTP(smtp_server, 25) smtp.login(from_addr, password) smtp.sendmail(from_addr, [to_addr], message.as_string()) smtp.quit() if __name__ == '__main__': # 使用 requests 模拟登录 session = login_163('your_username', 'your_password') # 使用 selenium 模拟登录(带验证码) # driver = login_163_with_captcha('your_username', 'your_password') # 发送邮件 from_addr = 'your_email@163.com' to_addr = 'a.163.com' subject = 'Test Email' content = 'This is a test email.' send_email(session, from_addr, to_addr, subject, content) ```

相关推荐

最新推荐

recommend-type

python自动化实现登录获取图片验证码功能

主要介绍了python自动化实现登录获取图片验证码功能,本文通过实例截图的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

Python如何操作office实现自动化及win32com.client的运用

主要介绍了Python如何操作office实现自动化及win32com.client的运用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
recommend-type

Python实现的查询mysql数据库并通过邮件发送信息功能

主要介绍了Python实现的查询mysql数据库并通过邮件发送信息功能,可实现Python针对mysql的查询与宕机信息通过邮件发送的相关操作技巧,需要的朋友可以参考下
recommend-type

python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】

主要介绍了python 实现的发送邮件模板,包含Python发送普通邮件、带附件及带图片邮件相关实现技巧,需要的朋友可以参考下
recommend-type

Python Selenium Cookie 绕过验证码实现登录示例代码

主要介绍了Python Selenium Cookie 绕过验证码实现登录示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。