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 24 Python
python递归计算N!的方法
May 05 Python
使用Python对Excel进行读写操作
Mar 30 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python 检查是否为中文字符串的方法
Dec 28 Python
Python3标准库总结
Feb 19 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
Python气泡提示与标签的实现
Apr 01 Python
python打开音乐文件的实例方法
Jul 21 Python
Python实现疫情地图可视化
Feb 05 Python
python如何实现递归转非递归
Feb 25 Python
Python实战实现爬取天气数据并完成可视化分析详解
Jun 16 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+MSSQL分页的例子
2006/10/09 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
2014/06/03 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
让DIV的滚动条自动滚动到最底部的3种方法(推荐)
2016/09/24 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
JS加密插件CryptoJS实现AES加密操作示例
2018/08/16 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
详解Python字典小结
2018/10/20 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
苹果中国官方网站:Apple中国
2016/07/22 全球购物
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
幼儿园教师自我鉴定
2014/03/20 职场文书
大学推普周活动总结
2015/05/07 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
美容院员工规章制度
2015/08/05 职场文书
导游词之临安白水涧
2019/11/05 职场文书
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python