python+selenium实现QQ邮箱自动发送功能


Posted in Python onJanuary 23, 2019

python实现从登录到自动发送qq邮件,供大家参考,具体内容如下

qq邮箱登录注意问题

账户密码登录框是写在一个iframe上的,所以我们要先进入iframe中才能定位到下面的两个输入框和登录按钮。从下图我们可以看到iframe=login_frame,我们可以是用driver.switch.to_frame(“login_frame”)进入iframe中。接下来的两个输入框和登录按钮都有id属性,我们只需要用driver.find_element_by_id(“xxx”)就可以定位到元素。
记得退出iframe,不然定位后面的所有元素都会失败(切记),退出iframe的话我们可以写driver.switch_to_default_content()来实现(个人发现to后面用“.”还是“_”符号,都可以将后面显示出来)。大家可以尝试下,把这句话省略,接着定位下面的元素。

python+selenium实现QQ邮箱自动发送功能

主页面注意事项

主页面上左上角的“写信”按钮,你右击是不会显示查看元素的,第一种方法,我们首先在页面其他地方右击,接着选中查看元素,然后用查看器左边的那个鼠标按钮去点击“写信”按钮。就可以查看到。第二种方法,直接根据“写信”两个字去定位元素。我们可以这样driver.find_element_by_link_text(“写信”)

写信页面注意事项

写信页面都写在iframe里面,所以要进入iframe中,然后定位收件人的输入框,我们可以从下面的页面代码中看到class的值有很多地方都用到(不是唯一),所有我们相对路径的方法,driver.find_element_by_xpath("//*[@id=“toAreaCtrl”]//div[2]/input")。这样就可以解决了。

文下面的文本框注意四点,第一点,文本框在一个iframe中;第二点,文本框没有任何的属性值,所以我们可以使用HTML标签名定位,driver.find_element_by_tag_name(“body”);第三点文本框需要先点击(click),在编写(send_keys),如果没有先点击在编写,那么你send_keys(“xxxx”)内容会放在主题后面的文本框中。第四点,退出iframe,然后再进入iframe=“mainFrame”,因为退出的话就是所有的iframe都退出。

完整脚本

from selenium import webdriver
import unittest,time,traceback
from selenium.common.exceptions import TimeoutException,NoSuchElementException


class TestDemo(unittest.TestCase):
 def setUp(self):
 self.driver=webdriver.Firefox(executable_path='f:\\geckodriver')


 def test_sendqqemail(self):
 try:
  url = 'https://mail.qq.com/'
  self.driver.get(url)
  self.driver.maximize_window()
  self.driver.switch_to_frame("login_frame")
  self.driver.find_element_by_id("u").send_keys("用户名")
  self.driver.find_element_by_id("p").send_keys("密码")
  self.driver.find_element_by_id("login_button").click()
  time.sleep(5)
  self.driver.switch_to.default_content() #退出iframe,如果没这句话后面的元素定位都会出错
  self.driver.find_element_by_id('composebtn').click()
  #写信模块都在iframe=mainFrame页面上
  self.driver.switch_to_frame("mainFrame")
  time.sleep(3)
  self.driver.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys("收件人")
  #定位主题
  self.driver.find_element_by_xpath('//input[@id="subject"]').send_keys("主题")
  #正文编写iframe中
  self.driver.switch_to_frame(self.driver.find_element_by_class_name("qmEditorIfrmEditArea"))
  #self.driver.find_element_by_xpath("/html/body").send_keys('你好,再见')
  #定位正文
  content=self.driver.find_element_by_tag_name("body")
  #必须click(),不然会写到主题里面
  content.click()
  content.send_keys("正文内容")
  time.sleep(3)
  self.driver.switch_to.default_content()
  self.driver.switch_to_frame("mainFrame")
  #定位发送按钮
  self.driver.find_element_by_xpath('//a[.="发送"]').click()
 except TimeoutException:
  print("显示等待页面元素超时")
 except NoSuchElementException:
  print("寻找页面元素不存在",traceback.print_exc())
 except Exception:
  print(traceback.print_exc())

 def tearDown(self):
 self.driver.quit()


 if __name__=="__main__":
 unittest.main()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python跳出循环语句continue与break的区别
Aug 25 Python
python随机生成指定长度密码的方法
Apr 04 Python
python实现查找两个字符串中相同字符并输出的方法
Jul 11 Python
Python中return语句用法实例分析
Aug 04 Python
Python面向对象特殊成员
Apr 24 Python
hmac模块生成加入了密钥的消息摘要详解
Jan 11 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
详解windows python3.7安装numpy问题的解决方法
Aug 13 Python
Python中asyncio模块的深入讲解
Jun 10 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
django 链接多个数据库 并使用原生sql实现
Mar 28 Python
Python中的全局变量如何理解
Jun 04 Python
python3实现逐字输出的方法
Jan 23 #Python
对Python w和w+权限的区别详解
Jan 23 #Python
Python中文件的写入读取以及附加文字方法
Jan 23 #Python
python write无法写入文件的解决方法
Jan 23 #Python
Python 支付整合开发包的实现
Jan 23 #Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 #Python
python判断字符串或者集合是否为空的实例
Jan 23 #Python
You might like
用PHP和ACCESS写聊天室(五)
2006/10/09 PHP
php简单静态页生成过程
2008/03/27 PHP
php学习之function的用法
2012/07/14 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
JavaScript实现简单验证码
2020/08/24 Javascript
为什么推荐使用JSX开发Vue3
2020/12/28 Vue.js
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
python变量不能以数字打头详解
2016/07/06 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
怎样创建、运行java程序
2014/08/01 面试题
大学生最常用的自我评价
2013/12/07 职场文书
优秀广告词大全
2014/03/19 职场文书
致运动员加油稿
2015/07/21 职场文书
2019公司管理制度
2019/04/19 职场文书
解析MySQL binlog
2021/06/11 MySQL
flex弹性布局详解
2022/03/20 HTML / CSS
springboot入门 之profile设置方式
2022/04/04 Java/Android