使用selenium+selenium发送QQ邮件

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

前言:

为实现selenium+python自动发送QQ邮件功能,需要搭建的环境:安装selenium包(pip install selenium)及安装谷歌驱动器(http://chromedriver.storage.googleapis.com/index.html)。并且要了解要selenium进行元素定位的八大方法,详细的资料请自行网上搜索或者查看书籍。
具体需要什么知识基础请参考:

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

实现:

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

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

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

第三部:关闭浏览器;

代码:

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

"""此脚本主要参考:https://blog.csdn.net/vae0000/article/details/73162662https://blog.csdn.net/vae0000/article/details/73179680https://blog.csdn.net/qq_19655383/article/details/70141624https://blog.csdn.net/qiye005/article/details/80259607主要修改了输入的参数对代码进行了优化及对这些操作进行详细的相关说明,方便新手学习最后修改日期:2018-11-16V1.0 实现脚本化命令行方式自动发送邮件V1.1封装登陆,写信,发送与退出子函数,并尝试调用V1.2对代码进行优化及进行详细的说明最后修改作者:sobbing_child"""from selenium import webdriver#导入By类from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitimport 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_childdef 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

时间: 2024-12-12 19:09:39

使用selenium+selenium发送QQ邮件的相关文章

Java发送QQ邮件

面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼.然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了. 首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop3和smtp服务,其实这就是两个网络协议,一个是接受邮件的协议,一个是发送邮件的协议: POP3 是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议.它是因特网电子邮件的第一个离线协议标准,P

java通过SMTP发送QQ邮件(参考自龙果学院)

java通过SMTP发送QQ邮件编辑 个人邮箱开通SMTP服务(进入个人邮箱,点击设置–>账户):  点击了账户后,往下拉可以看到SMTP服务选项,默认情况下这个选项是不开启的.点击开启腾讯会进行身份验证,身份验证通过以后,会收到一个用于使用SMTP的16位口令,验证身份的过程中把收到的口令保存下来,因为后面要使用SMTP功能必须要用到这个口令.  具体实现代码:     public static void main(String args[]) {        // 邮件内容       

python脚本连续发送QQ邮件

今天习得用python写一个连续发送QQ邮件的脚本,经过测试,成功给国内外的服务器发送邮件,包括QQ邮箱.163邮箱.google邮箱,香港科技大学的邮箱和爱丁堡大学的邮箱.一下逐步解答相关技巧. 首先,执行如下操作,__init__ 标志该文件夹是一个python程序包 $mkdir automail $cd automail $gedit qqmail $touch __init__ 打开 qqmail ,写入如下代码. 1 #-*- coding: utf -8 -*- 2 import

Java发送QQ邮件-附jar包下载链接

Java发送QQ邮件 jar包链接 链接:https://pan.baidu.com/s/1mt7LsPVIuMl5HLXEOppWkQ 提取码:x4jf 示例代码: package java2; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; /** * 测试发送邮件 */ p

使用python发送QQ邮件

这里用到了Python的两个包来发送邮件: smtplib 和 email . Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”.使用的 MIMEText 对象,为底层的 MIME(Multipurpose Internet MailExtensions,多用途互联网邮件扩展类型)协议传输创建了一封空邮件,最后通过高层的SMTP 协议发送出去. MIMEText 对象 msg 包括收发邮箱地址.邮件正文和主题,Python 通过它就可以创建一封格式正

java spring 开启SMTP服务发送QQ邮件

首先进入自己的QQ邮箱,在设置中修改账户信息 然后来至底部 点击开启,再用手机发送对应信息到指定号码,然后点击我已发送 获取授权码 注意提示: 到这里,相信你已经开通了SMTP服务,这样就可以在java code发送邮件了 接下来的是Spring 中使用邮件服务 首先是配置信息使用的是587端口,刚开始用465端口我纠结了好久(使用465端口的错误详情),用不了,你可以尝试,默认的25端口应该也是不适合的 <!-- 邮件服务 --> <bean id="mailSender&q

python 发送QQ邮件的小例子

首先QQ邮件用第三方客户端发送要申请验证码.而不是QQ的密码. 授权码就是你接下来登录要使用的密码 那么剩下的工作就很简单了.附简单代码如下: #coding:utf-8 import smtplib from email.mime.text import MIMEText _user = "[email protected]" _pwd = "12341234134" #用授权码 _to = "[email protected]" msg =

python 发送qq邮件

# coding=utf-8import smtplibfrom email.mime.text import MIMETextimport email def sen(file_new): msg_from = '[email protected]' # 发送方邮箱 passwd = 'xthwzlXXX' # 填入发送方邮箱的授权码 msg_to = '[email protected]' # 收件人邮箱 subject = "python邮件测试" # 主题 content =

Python3发送qq邮件,测试通过

import smtplib from email.mime.text import MIMEText # 收件人列表 mail_namelist = ["[email protected]"] # 发送方信息 mail_user = "[email protected]" # 口令,注意这里是腾讯的授权码,可不是什么 QQ密码或者独立密码! # http://service.mail.qq.com/cgi-bin/help?subtype=1&&i