欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python(自动化线性测试) 两种方式利用selenium自动登陆QQ邮箱发送邮件并退出

程序员文章站 2024-01-18 15:12:01
Pyhon# Selenium## 分享## 线性测试List item自动登陆QQ邮箱发送邮件@TOC欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作...

Pyhon# Selenium## 分享## 线性测试

第一次写博客。。。。。格式可能不太美观,以后逐步改进!
后面文章我将分享些关于一些简单自动化脚本的基础知识

  1. 本文
    2 item(主要讲解):

主要思路:利用selenium的webdriver登陆QQ邮箱,实现邮件相关信息的填写
和邮件的发送,最后判断发送结果并退出邮箱。

强调:方式一的登陆方式属于填写相应信息登陆,首先注意元素定位需要转换框架,不然有些元素定位不到,还有在qq邮箱的登陆界面可能偶而会出现拼图验证码,本方式省略直接破解验证码登陆,转而利用简单的sleep间歇时间来手动滑动验证码。

需要用到的库:selenium,time
需要用到的驱动:对应Chrome版本的驱动,并放在python安装目录下

加粗文本

下面利用两种方式登陆并发送邮件

##方式一:利用selenium登陆qq邮箱
```#自动化线性测试
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep

"""登录qq邮箱网址"""
#1 打开qq邮箱网址
driver = webdriver.Chrome()
driver.maximize_window() #最大化浏览器窗口
url = 'https://mail.qq.com/'
driver.implicitly_wait(3) #隐式等待
driver.get(url)

#2 切换窗口并输入账号密码信息
driver.switch_to.frame(driver.find_element_by_id('login_frame'))
user = '######' #这里字符串内填写登陆账号
password = '####' #这里字符串内填写qq密码
driver.find_element_by_xpath('//*[@id="u"]').send_keys(user)
driver.find_element_by_xpath('//*[@id="p"]').send_keys(password)

#假如出现滑块拼图,暂时手动代替(利用sleep)登陆操作
try:
    driver.find_element_by_xpath('//*[@id="login_button"]').click()
except NoSuchElementException:
    sleep(4)
    
#更新窗口句柄,保险起见
for handle in driver.window_handles:
    driver.switch_to.window(handle)
    if 'QQ邮箱' in driver.title:
        print('已经进入QQ邮箱')
        break
    
#给予js加载缓冲的时间
sleep(6)

"""写信操作"""
#点击写信
driver.find_element_by_xpath('//*[@id="composebtn_td"]').click()
sleep(2)

#再次更新句柄
for handle in driver.window_handles:
    driver.switch_to.window(handle)
    
sleep(2)
#切入框架
driver.switch_to.frame(driver.find_element_by_id('mainFrame'))
sleep(2)

#填写收件人,主题
receiver = '######'   #字符串内填写相应的收件人qq邮箱(即qq号码)
driver.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys(receiver)
title = '测试邮件'   #填写邮件主题
driver.find_element_by_xpath('//*[@id="subject"]').send_keys(title)
sleep(3)

#添加附件,注意文件路径前面添加r
driver.find_element_by_name('UploadFile').send_keys(r'D:\python\debug.log') 
   #由于input标签,文件上传可以用send_keys加路径来实现,括号(r' 路径')的形式

#输入正文
driver.switch_to.frame(driver.find_element_by_class_name('qmEditorIfrmEditArea'))
sleep(2)
    #下面send_keys字符串内输入正文内容
driver.find_element_by_xpath("/html/body").send_keys('####')
sleep(2)

#切出框架再切入框架点击发送
driver.switch_to.default_content()
sleep(2)
driver.switch_to.frame(driver.find_element_by_id('mainFrame'))
driver.find_element_by_xpath('//*[@id="toolbar"]/div/a[1]').click()
sleep(5)

#验证是否发送成功
try:  #由于发送成功会出现相关字眼在代码中,故可利用此点进行验证结果
    assert '您的邮件已发送' in driver.page_source
except AssertionError:
    print("邮件发送失败")
else:
    print("邮件成功发送")
sleep(2)
#返回主框架,并退出QQ邮箱
driver.switch_to.default_content()
driver.find_element_by_xpath('//*[@id="SetInfo"]/div[1]/a[3]').click()
print("已退出QQ邮箱,欢迎下次光临")
print("正在关闭浏览器")
sleep(3)
driver.quit()  #关闭浏览器

## 方式二:利用cookies信息登陆,分为两部分讲解
第一部分:获取cookies登陆信息,可利用上面方式一登陆一次打印获取cookies信息
代码如下:
```python
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep

"""登录qq邮箱网址"""
#1 打开qq邮箱网址
driver = webdriver.Chrome()
driver.maximize_window() #最大化浏览器窗口
url = 'https://mail.qq.com/'
driver.implicitly_wait(3) #隐式等待
driver.get(url)

#2 切换窗口并输入账号密码信息
driver.switch_to.frame(driver.find_element_by_id('login_frame'))
user = '######' #这里字符串内填写登陆账号
password = '####' #这里字符串内填写qq密码
driver.find_element_by_xpath('//*[@id="u"]').send_keys(user)
driver.find_element_by_xpath('//*[@id="p"]').send_keys(password)

#假如出现滑块拼图,暂时手动代替(利用sleep)登陆操作
try:
    driver.find_element_by_xpath('//*[@id="login_button"]').click()
except NoSuchElementException:
    sleep(4)
    
#更新窗口句柄,保险起见
for handle in driver.window_handles:
    driver.switch_to.window(handle)
    if 'QQ邮箱' in driver.title:
        print('已经进入QQ邮箱')
        break
    
#给予js加载缓冲的时间
sleep(6)
#获取cookies信息并打印
cookies = driver.get_cookies()
print(cookies)
"""第二部分:利用前面获取到的cookies添加到页面再刷新实现登陆"""
代码如下:
#cookie登陆qq邮箱尝试
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import  sleep

driver = webdriver.Chrome()
#清除之前的所有cookies
driver.delete_all_cookies()

#确定cookies信息
cookies = ['']#  前面获取到的cookies信息,复制即可
driver.set_page_load_timeout(20)  #设置页面加载时间
driver.set_script_timeout(20)

#登陆到未登录的页面
try:
    driver.maximize_window()
    driver.get('https://mail.qq.com/')
except:
    driver.execute_script("window.stop()")  #加载js

sleep(10)
#添加cookie到未登录的页面
for cookie in cookies:
    driver.add_cookie(cookie)
#刷新页面看看
driver.refresh()

#更新窗口句柄并判断是否成功进入邮箱
for handle in driver.window_handles:
    driver.switch_to.window(handle)
    if 'QQ邮箱' in driver.title:
        print("您已进入QQ邮箱")
        break
#给予缓冲时间
sleep(3)

# 点击写信
driver.find_element_by_xpath('//*[@id="composebtn_td"]').click()
sleep(2)

# 再次更新句柄
for handle in driver.window_handles:
    driver.switch_to.window(handle)

sleep(2)
# 切入框架
driver.switch_to.frame(driver.find_element_by_id('mainFrame'))
sleep(2)

# 填写收件人,主题
receiver = '#####'   #输入收件人qq号码
driver.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys(receiver)
title = '主题'#这里输入主题
driver.find_element_by_xpath('//*[@id="subject"]').send_keys(title)
sleep(3)

# 添加附件,注意文件路径前面添加r
driver.find_element_by_name('UploadFile').send_keys(r'D:\python\debug.log')   #input标签,send-keys()添加路径上传附件

# 输入正文
driver.switch_to.frame(driver.find_element_by_class_name('qmEditorIfrmEditArea'))
sleep(2)
driver.find_element_by_xpath("/html/body").send_keys('###')  #输入正文
sleep(2)

# 切出框架再切入框架点击发送
driver.switch_to.default_content()
sleep(2)
driver.switch_to.frame(driver.find_element_by_id('mainFrame'))
driver.find_element_by_xpath('//*[@id="toolbar"]/div/a[1]').click()
sleep(5)

# 验证是否发送成功
try:
    assert '您的邮件已发送' in driver.page_source
except AssertionError:
    print("邮件发送失败")
else:
    print("邮件成功发送")
sleep(2)
# 返回主框架,并退出QQ邮箱
driver.switch_to.default_content()
driver.find_element_by_xpath('//*[@id="SetInfo"]/div[1]/a[3]').click()
print("已退出QQ邮箱,欢迎下次光临")
print('正在退出浏览器')
sleep(3)
driver.quit()









本文地址:https://blog.csdn.net/weixin_46350177/article/details/107175531