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实现斐波那契递归函数的方法
Sep 08 Python
django模型层(model)进行建表、查询与删除的基础教程
Nov 21 Python
Python os.access()用法实例
Feb 18 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
Jul 04 Python
python装饰器的特性原理详解
Dec 25 Python
python3 字符串知识点学习笔记
Feb 08 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
Mar 31 Python
解决django框架model中外键不落实到数据库问题
May 20 Python
如何利用python读取micaps文件详解
Oct 18 Python
Pytorch实现图像识别之数字识别(附详细注释)
May 11 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 Python
Python 实现Mac 屏幕截图详解
Oct 05 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 全文搜索和替换的实现代码
2008/07/29 PHP
PHP nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
PHP分多步骤填写发布信息的简单方法实例代码
2012/09/23 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
2016/04/11 PHP
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
jQuery事件对象总结
2016/10/17 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
JS实现购物车特效
2017/02/02 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
简介Django中内置的一些中间件
2015/07/24 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
Python中的正则表达式与JSON数据交换格式
2019/07/03 Python
python matplotlib拟合直线的实现
2019/11/19 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
母亲七十大寿答谢词
2014/01/18 职场文书
十八大闭幕感言
2014/01/22 职场文书
中学生差生评语
2014/01/30 职场文书
统计专业自荐书
2014/07/06 职场文书
迎七一演讲稿
2014/09/12 职场文书
高中学生自我评价范文
2014/09/23 职场文书
关于运动会的广播稿
2015/08/19 职场文书
MySQL 视图(View)原理解析
2021/05/19 MySQL
mysql中关键词exists的用法实例详解
2022/06/10 MySQL