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 tempfile模块学习笔记(临时文件)
May 25 Python
Python获取邮件地址的方法
Jul 10 Python
浅谈使用Python变量时要避免的3个错误
Oct 30 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
基于python实现聊天室程序
Jul 27 Python
Python 从相对路径下import的方法
Dec 04 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
基于Tensorflow高阶读写教程
Feb 10 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
pycharm 的Structure界面设置操作
Feb 05 Python
如何利用python实现列表嵌套字典取值
Jun 10 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
php列出一个目录下的所有文件的代码
2012/10/09 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
查看大图功能代码jquery版
2013/11/05 Javascript
jquery操作select大全
2014/04/25 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
jQuery快速实现商品数量加减的方法
2017/02/06 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
python中altair可视化库实例用法
2021/01/26 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
SQL面试题
2013/04/30 面试题
数控技校生自我鉴定
2014/03/02 职场文书
霸王洗发水广告词
2014/03/14 职场文书
商场周年庆活动方案
2014/08/19 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA