5、Selenium+Python自动登录163邮箱发送邮件

1、Selenium实现自动化,需要定位元素,以下查看163邮箱的登录元素

(1)登录(定位到登录框,登录框是一个iframe,如果没有定位到iframe,是无法定位到账号框与密码框)

定位到邮箱框(name='email')

定位到密码框(name='password')

定位到登录按钮(id="dologin"

 

2、代码实现

#coding=utf-8

import time
from selenium import webdriver

broswer = webdriver.Ie()

broswer.get("https://mail.163.com/")  # 输入指定网址

broswer.switch_to.frame('x-URS-iframe')  # 登录框是一个iFrame,无法没有定位到该点,则无法找到账号与密码文本框

broswer.find_element_by_name('email').clear()  # 清除账号框信息

broswer.find_element_by_name('email').send_keys('nancywangdl')  # 定位到账号框

broswer.find_element_by_name('password').send_keys('密码')   # 定位到密码框

login = broswer.find_element_by_css_selector("#dologin")  # 定位到登录按钮

login.click()    # 点击“登录”按钮

time.sleep(6)    # 等待6秒

broswer.find_element_by_id("_mail_component_70_70").click()   # 点击“写信”按钮

time.sleep(2)

broswer.find_element_by_class_name('nui-editableAddr-ipt').send_keys('1095936979@qq.com') # 输入收件人邮箱

broswer.find_element_by_xpath("//input[@class='nui-ipt-input' and @type='text' and @maxlength='256']").send_keys(u'测试')

xpath = broswer.find_element_by_xpath("//div[@class='APP-editor-edtr']/iframe")

broswer.switch_to_frame(xpath)

broswer.find_element_by_xpath("//body[@class='nui-scroll' and @contenteditable='true']").send_keys(u'这是一个自动化测试邮件')

broswer.switch_to_default_content()

broswer.find_element_by_xpath("//div[@class='nui-toolbar-item']/div/span[2]").click()

time.sleep(3)

broswer.quit()  # 退出浏览器

  

转载于:https://www.cnblogs.com/android-it/p/9087524.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个任务需要用到 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) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值