1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python(自动化线性测试) 两种方式利用selenium自动登陆QQ邮箱发送邮件并退出

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

时间:2023-07-15 20:50:31

相关推荐

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

需求:

利用selenium的webdriver登陆QQ邮箱,实现邮件相关信息的填写

和邮件的发送,最后判断发送结果并退出邮箱。

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

需要用到的库:selenium,time

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

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

##方式一:利用selenium登陆qq邮箱```#自动化线性测试from selenium import webdriverfrom mon.exceptions import NoSuchElementExceptionfrom time import sleep"""登录qq邮箱网址"""#1 打开qq邮箱网址driver = webdriver.Chrome()driver.maximize_window() #最大化浏览器窗口url = '/'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)#添加附件,注意文件路径前面添加rdriver.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_sourceexcept 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信息代码如下:```pythonfrom selenium import webdriverfrom mon.exceptions import NoSuchElementExceptionfrom time import sleep"""登录qq邮箱网址"""#1 打开qq邮箱网址driver = webdriver.Chrome()driver.maximize_window() #最大化浏览器窗口url = '/'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 webdriverfrom mon.exceptions import NoSuchElementExceptionfrom time import sleepdriver = webdriver.Chrome()#清除之前的所有cookiesdriver.delete_all_cookies()#确定cookies信息cookies = ['']# 前面获取到的cookies信息,复制即可driver.set_page_load_timeout(20) #设置页面加载时间driver.set_script_timeout(20)#登陆到未登录的页面try:driver.maximize_window()driver.get('/')except:driver.execute_script("window.stop()") #加载jssleep(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)# 添加附件,注意文件路径前面添加rdriver.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_sourceexcept 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()

The End!!创作不易,欢迎点赞/评论!!欢迎关注个人公众号

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。