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

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()









你可能感兴趣的:(python,selenium,webdriver,python)