博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用python+selenium发送QQ邮件
阅读量:5077 次
发布时间:2019-06-12

本文共 5741 字,大约阅读时间需要 19 分钟。

参考 :    初识selenium-发送QQ邮件  链接------》https://blog.csdn.net/qiye005/article/details/80259607

前言:

         为实现selenium+python自动发送QQ邮件功能,需要搭建的环境:安装selenium包(pip install selenium)及安装谷歌驱动器()。并且要了解要selenium进行元素定位的八大方法,详细的资料请自行网上搜索或者查看书籍。

具体需要什么知识基础请参考:

https://blog.csdn.net/huilan_same/article/details/52559711

---------------------

实现:

首先定义邮件发送的步骤:

第一步:打开浏览器,调到邮箱登录页面,输入账号密码并登录;

第二部:点击进入邮件编辑页面,输入地址、标题和内容,并发送;

第三部:关闭浏览器;

代码:

   

         根据之前的动作分解,结合掌握的selenium进行元素定位的方法,实现下述python代码。

""" 此脚本主要参考:https://blog.csdn.net/vae0000/article/details/73162662 https://blog.csdn.net/vae0000/article/details/73179680 https://blog.csdn.net/qq_19655383/article/details/70141624 https://blog.csdn.net/qiye005/article/details/80259607 主要修改了输入的参数对代码进行了优化及对这些操作进行详细的相关说明,方便新手学习 最后修改日期:2018-11-16 V1.0 实现脚本化命令行方式自动发送邮件 V1.1封装登陆,写信,发送与退出子函数,并尝试调用 V1.2对代码进行优化及进行详细的说明 最后修改作者:sobbing_child """ from selenium import webdriver #导入By类 from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait import time # dr = webdriver.Chrome()  #webdirver模块初始化Chrome对象 # dr.get("https://mail.qq.com") # 函数名称: LoginFun(_username,_password) # 函数功能: 实现根据指定QQ邮箱网页,账号,密码实现登陆QQ邮箱动作               #                  _dr:webdirver模块初始化Chrome对象 #                  _emailAddress:访问QQ邮箱网址 #                  _username:邮箱用户名 #                  _password:相应邮箱用户名密码 # 输出参数:   使用ID进行定位元素并直接进行send_keys操作并把切换表单去掉,函数clear()去掉 # 修改信息:   2018-11-16  sobbing_child #封装进行登录的函数 def LoginFun(_dr,_emailAddress,_username,_password):     # 登录网址     _dr.get(_emailAddress)     # 根据ID切换表单     _dr.switch_to_frame("login_frame")     # 找到账好的ID,并进行输入     _dr.find_element(By.NAME,"u").send_keys(_username)     # 找到密码的ID,并进行输入     _dr.find_element(By.NAME,"p").send_keys(_password)     # 找到登录的ID并进行点击操作,隐式等待5秒     Login = _dr.find_element(By.ID,"login_button")     Login.click()     _dr.implicitly_wait(5) # 函数名称      WriteAndSendFun(_driver,_receiverAddress,_subjectString,_contentString) # 函数功能:   实现根据指定收件人定制,主题,新建邮件正文内容,实现填写及发送动作 #   # 输入参数:           _dirver模块初始化Chrome对象 #                    _receiverAddress:收件人邮箱 #                    _subjectString:主题名称 #                    _contentString:邮件正文内容 # 输出参数:   对某些操作进行详细的说明及使用其它方式进行定位(ps:坑多,收件人定了一晚上没定到) # 修改信息:    2018-11-16  sobbing_child def WriteAndSendFun(_dr,_receiverAddress, _subjectString, _contentString):     #可以根据ID或者link_text方法进行定位元素     # writeLink = dr.find_element_by_link_text("写信")     writeLink = _dr.find_element(By.ID,"composebtn")     writeLink.click()     # 根据标签iframe的ID切换到写信框架     _dr.switch_to_frame("mainFrame")     #收件人信息  根据xpath方法定位,可以用其它方法但是这里用xpath方法进行定位准确     _dr.find_element_by_xpath("//*[@id='toAreaCtrl']/div/input").send_keys(_receiverAddress)     #邮件主题信息 根据ID进行定位     _dr.find_element(By.ID,"subject").send_keys(_subjectString)     #邮件正文信息  可以根据tag或者class_name进行表单的切换操作     #dr.switch_to_frame(dr.find_element_by_tag_name("iframe"))     _dr.switch_to_frame(_dr.find_element_by_class_name("qmEditorIfrmEditArea"))     _dr.find_element_by_tag_name("body").send_keys(_contentString)     #送信按钮触发     _dr.switch_to.parent_frame()     #webDriver只能在一个页面上对元素识别和定位,对于frame/iframe表单内嵌页面上的元素无法直接定位,     #此时就需要通过switch_to.frame()方法将当前定位的主题切换为iframe表单的内嵌页面中。     _dr.find_element_by_link_text("发送").click()     _dr.implicitly_wait(5) # 定义主函数 def main():     #驱动存放位置     webDriverLoc = r'C:\Users\Administrator\AppData\Local\Programs\Python\Python36\chromedriver.exe'     dr = webdriver.Chrome(executable_path=webDriverLoc)     #QQ邮箱网址,账号密码相关     username = '登陆邮箱账号'     password = '登陆邮箱密码'     emailAddress="https://mail.qq.com/"     # 邮件内容定义     receiverAddress = "QQ邮箱"     subjectString = "selenup+python自动化测试"     contentString = "这是邮件正文,测试,测试"     # 调用登陆操作子函数     LoginFun(dr,emailAddress,username,password)     # 调用写信与发送操作子函数     WriteAndSendFun(dr,receiverAddress, subjectString, contentString)     # 最后调用退出操作子函数     dr.close()     # 调用主函数 if __name__ == "__main__":     main()         # ---------------------         # 作者:sobbing_child         # 来源:QiYe005         # 原文:https://blog.csdn.net/qiye005/article/details/80259607         # 版权声明:本文为博主原创文章,转载请附上博文链接! 接下来进行详细的说明,先看如下代码及图片

根据元素的name进行定位(账号和密码):

切换表单:

根据元素的ID进行定位(登录):

# 登录网址 _dr.get(_emailAddress) # 根据ID切换表单 _dr.switch_to_frame("login_frame") # 找到账好的ID,并进行输入 _dr.find_element(By.NAME,"u").send_keys(_username) # 找到密码的ID,并进行输入 _dr.find_element(By.NAME,"p").send_keys(_password) # 找到登录的ID并进行点击操作,隐式等待5秒 Login = _dr.find_element(By.ID,"login_button") Login.click() _dr.implicitly_wait(5) 从图中可以看出各界面对应的ID及NAME的值,这里用的是根据NAME的值,注意要先切换到表单再进行操作,也可以使用其它方法进行定位这样定位较为清晰明了 再来看下面的代码,进入写信的阶段:

根据元素的ID进行定位(写信):

# writeLink = dr.find_element_by_link_text("写信") writeLink = _dr.find_element(By.ID,"composebtn") writeLink.click()
根据标签iframe的ID切换到写信框架:

_dr.switch_to_frame("mainFrame")

 

收件人信息,根据xpath方法定位,这里不知道为什么你把箭头指向收信人的时候是固定的div这里, 楼主在这里一直根据div里面class、style进行定位一直不能send.keys。其实是要定位到input, 其实自己想一下收件人,登录等操作的tag通常是input。

_dr.find_element_by_xpath("//*[@id='toAreaCtrl']/div/input").send_keys(_receiverAddress)

 

根据元素的ID进行定位(主题信息):

 

_dr.find_element(By.ID,"subject").send_keys(_subjectString)

 

邮件正文信息,这里要说明下这里的ID级NAME是变化的,这个时候可以根据tag或者class_name,xpath方法进行定位:

 

#dr.switch_to_frame(dr.find_element_by_tag_name("iframe")) _dr.switch_to_frame(_dr.find_element_by_class_name("qmEditorIfrmEditArea")) _dr.find_element_by_tag_name("body").send_keys(_contentString)

 

 

webDriver只能在一个页面上对元素识别和定位,对于frame/iframe表单内嵌页面上的元素无法直接定位, 此时就需要通过switch_to.frame()方法将当前定位的主题切换为iframe表单的内嵌页面中:

_dr.switch_to.parent_frame() _dr.find_element_by_link_text("发送").click() _dr.implicitly_wait(5)

 接下来就是函数的封装了,自己填入收件人、正文等,这里不再做陈述,有疑问欢迎留言!

# --------------------- # 作者:sobbing_child # 来源:QiYe005 # 原文:https://www.cnblogs.com/aanb/ # 版权声明:本文为博主原创文章,转载请附上博文链接

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/aanb/p/9976156.html

你可能感兴趣的文章
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
OO设计的接口分隔原则
查看>>
数据库连接字符串大全 (转载)
查看>>
java类加载和对象初始化
查看>>
对于负载均衡的理解
查看>>
django简介
查看>>
window.event在IE和Firefox的异同
查看>>
常见的js算法面试题收集,es6实现
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Windows10 下Apache服务器搭建
查看>>
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>
记一次Web服务的性能调优
查看>>
Linux常用命令大全
查看>>
jQuery.form.js使用
查看>>