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中文竖排显示的方法
Jul 28 Python
Python三级菜单的实例
Sep 13 Python
Python实现嵌套列表去重方法示例
Dec 28 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
用Python实现数据的透视表的方法
Nov 16 Python
浅谈Python中eval的强大与危害
Mar 13 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
python urllib爬虫模块使用解析
Sep 05 Python
python第三方库学习笔记
Feb 07 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
详解如何用Python实现感知器算法
Jun 18 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生成网页快照 不用COM不用扩展.
2010/02/11 PHP
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
显示、隐藏密码
2006/07/01 Javascript
js jquery数组介绍
2012/07/15 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
2013/01/11 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
Vue的Class与Style绑定的方法
2017/09/01 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
使用vue制作滑动标签
2019/09/21 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
带你了解python装饰器
2017/06/15 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
Python-opencv 双线性插值实例
2020/01/17 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
质检员的岗位职责
2013/11/15 职场文书
人事主管岗位职责
2014/01/30 职场文书
开学典礼策划方案
2014/05/28 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
安全生产奖惩制度
2015/08/06 职场文书