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使用reportlab画图示例(含中文汉字)
Dec 03 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
Python subprocess模块详细解读
Jan 29 Python
python实现微信远程控制电脑
Feb 22 Python
python批量读取txt文件为DataFrame的方法
Apr 03 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
详解python使用turtle库来画一朵花
Mar 21 Python
python获取txt文件词向量过程详解
Jul 05 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
python IP地址转整数
Nov 20 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 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的历史和优缺点
2006/10/09 PHP
php adodb分页实现代码
2009/03/19 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
JS表的模拟方法
2015/02/05 Javascript
jQuery实现类似标签风格的导航菜单效果代码
2015/08/25 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
[01:02:32]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第二场 2月26日
2021/03/11 DOTA
python回调函数用法实例分析
2015/05/09 Python
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
python使用mysql数据库示例代码
2017/05/21 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
python sqlite的Row对象操作示例
2019/09/11 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
英国精品买手店:Browns Fashion
2016/09/29 全球购物
个人委托书范本
2014/04/02 职场文书
三十年同学聚会感言
2015/07/30 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL
ubuntu下常用apt命令介绍
2022/06/05 Servers