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读取json文件并将数据插入到mongodb的方法
Mar 23 Python
python实现中文分词FMM算法实例
Jul 10 Python
详解Django+Uwsgi+Nginx的生产环境部署
Jun 25 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
详解PyCharm安装MicroPython插件的教程
Jun 24 Python
Django1.11配合uni-app发起微信支付的实现
Oct 12 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
pymongo insert_many 批量插入的实例
Dec 05 Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 Python
Python中for后接else的语法使用
May 18 Python
tensorboard 可视化之localhost:6006不显示的解决方案
May 22 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 批量删除 sql语句
2009/06/05 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
javascript document.images实例
2008/05/27 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
AngularJS中处理多个promise的方式
2016/02/02 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
Vue实现购物车场景下的应用
2017/11/27 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
Angular利用HTTP POST下载流文件的步骤记录
2020/07/26 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
python中的全局变量用法分析
2015/06/09 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Python requests接口测试实现代码
2020/09/08 Python
python切割图片的示例
2020/11/12 Python
英国健身超市:Fitness Superstore
2019/06/17 全球购物
内部类的定义、种类以及优点
2013/10/16 面试题
仓管岗位职责范本
2014/02/08 职场文书
三字经教学反思
2014/04/26 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
2015年教研工作总结
2015/05/23 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
Redis RDB技术底层原理详解
2021/09/04 Redis
Java实现学生管理系统(IO版)
2022/02/24 Java/Android