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中while true的使用
Oct 13 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
用Python设计一个经典小游戏
May 15 Python
Python3使用SMTP发送带附件邮件
Jun 16 Python
python实现雨滴下落到地面效果
Jun 21 Python
python脚本开机自启的实现方法
Jun 28 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
新手学习Python2和Python3中print不同的用法
Jun 09 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
django使用channels实现通信的示例
Oct 19 Python
总结Python常用的魔法方法
May 25 Python
如何利用Python实现n*n螺旋矩阵
Jan 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
德生S2000电路分析
2021/03/02 无线电
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
js select常用操作控制代码
2010/03/16 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
13个PHP函数超实用
2015/10/21 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
2016/12/30 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
vue教程之toast弹框全局调用示例详解
2020/08/24 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
在Django的session中使用User对象的方法
2015/07/23 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
2019/08/20 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
Python操作qml对象过程详解
2019/09/26 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
《盘古开天地》教学反思
2014/02/28 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
文秘自荐信
2014/06/28 职场文书
七年级地理教学计划
2015/01/22 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
唐山大地震的观后感
2015/06/05 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers