Selenium+webdriver自动化登陆QQ邮箱并发送邮件
1.关于selenium
(1)测试与浏览器的兼容性:测试应用程序能否兼容工作在不同浏览器和操作系统之上。
(2)测试系统功能:录制用例自动生成测试脚本,用于回归功能测试或者系统用例说明。
简而言之,Selenium 就是一款可以录制用户操作, 帮助Web测试人员简化重复劳动的工具。
2.selenium安装
win+r,进入cmd,

然后输入pip install selenium,等一会就安装好了。
3.webdriver原理
WebDriver是按照Server-Client的模式设计的。
Server就是Remote Server, 可以是任意的浏览器。当我们的脚本启动浏览器后,该浏览器就是Remote Server,她的职责就是等待Client发送请求并做出响应。
Client端简单说就是我们写的测试脚本。脚本中的一些行为比如打开浏览器,跳转到指定的URL等操作就是以http请求的方式发送给被测试的浏览器,也就是Remote Server. Remote Server接受请求,执行相应操作,并在Response中返回执行状态、返回值等信息。
4.下载安装webdriver
Webdriver下载路径:
http:// chromedriver. storage. googleapis. com/ index. html,用于驱动打开Chrome;
geckodriver下载路径: https:// github. com/ moz illa/ geckodriver/releeases,用于驱动打开Firefox;
下载后放在python. exe相同目录下( 我用的是谷歌浏览器,所以就下载的chromedriver) :

5.测试是否可用

出现了下面的结果,说明我们做好了准备工作,可以开始自动化了。

6.要做到自动化,我们就需要模仿鼠标和键盘的操作,我这里只用到了一些简单的操作:

7.自动化在操作之前,要找到进行操作的位子,我可以根据网页源代码的标签去找(标签的属性最好是唯一的)。
find_element _by_ id(a) #定位id=‘a’的地方
find_element_by_ name (a) #定位name=‘a'的地方
find_element_by_ class_name (a) #定位class=‘a’的地方
find_element_ by_ xpath()
find_element_ by_ css_ selector()
find_element_ by_ tag_ name ()
find_element_ by_ link_text() #定位文本链接的
find_element_by_ partial_link_text() #和上面的一样,但我们可只截取链接的一部分
8.运行程序的全代码
from selenium import webdriver
import time first_url = 'http://www.mail.qq.com'
driver = webdriver.Chrome()
driver.get(first_url)
driver.implicitly_wait(3)
driver.maximize_window() #切换到iframe
time.sleep(3)
driver.switch_to.frame(driver.find_element_by_id('login_frame'))
time.sleep(3) #点击头像进行登录
driver.find_element_by_id('img_out_1147451366').click()
time.sleep(2)
#进入收件箱
driver.find_element_by_id('folder_1').click()
time.sleep(2)
#点击写信
driver.find_element_by_id('composebtn').click() time.sleep(3)
#切换到iframe
driver.switch_to.frame(driver.find_element_by_id('mainFrame')) #输入收件人
driver.find_element_by_xpath("//*[@id='toAreaCtrl']/div[2]/input").send_keys('949709967@qq.com')
time.sleep(2)
#添加附件
driver.find_element_by_name('UploadFile').send_keys(r'C:\Users\11474\Desktop\2019年下半年英语四级笔试准考证(王龙).zip') #输入正文,先切入到iframe
driver.switch_to_frame(driver.find_element_by_class_name('qmEditorIfrmEditArea'))
time.sleep(3)
#输入正文
driver.find_element_by_xpath("ml/body").send_keys('小哥哥,爱你哟')
time.sleep(3)
#切出iframe
driver.switch_to_default_content() #再切入到‘发送’按钮的iframe
driver.switch_to.frame(driver.find_element_by_id('mainFrame'))
time.sleep(3)
#邮件发送 driver.find_element_by_name('sendbtn').click()
运行结果要录屏就不发了。

------------恢复内容结束------------

Selenium+webdriver自动化登陆QQ邮箱并发送邮件的更多相关文章
- Python+selenium自动循环扔QQ邮箱漂流瓶
Python代码如下: # coding=utf-8 from selenium import webdriver from time import sleep from random import ...
- C#如何利用QQ邮箱SMTP发送邮件
public void SendEmail() { MailMessage msg = new MailMessage(); msg.To.Add("to@qq.com");//收 ...
- 用JavaMail通过QQ邮箱来发送邮件(第一篇博客,备忘)
1.先启用QQ邮箱里POP3/STMP服务:生成授权码 2.导入mail.jar包(不要用太古董的技术,你懂得) 3.注意要在代码里加上开启SSL加密的代码 4.直接上代码 import java.u ...
- MY_使用selenium自动登录126/163邮箱并发送邮件
转自:https://www.cnblogs.com/yin-tao/p/7244082.html 我使用的是python2.7.13+selenium ps:几天之前,我曾多次尝试写这段代码,但是在 ...
- python QQ邮箱自动发送邮件
于初学者来讲在写发送邮件代码时常见的错误有SMTPAuthenticationError535,有点懵逼,检查用户名,密码正确就是报错, 想当年笔者也是这么过来的,现在就给大家分享一下个人经验: 一, ...
- selenium登陆qq邮箱页面
from selenium import webdriver driver = webdriver.Chrome() driver.get('https://mail.qq.com/cgi-bin/l ...
- python3 通过qq邮箱定时发送邮件
下面的代码为了每天定时发送监控邮件,监控什么呢?监控当天redis队列中是否有没有消费的数据,和当天mysql中新增的数据量 # -*- coding:utf-8 -*- from common.re ...
- 使用Python登陆QQ邮箱发送垃圾邮件 简单实现
参考:Python爱好者 知乎文章 需要做的是: 1.邮箱开启SMTP功能 2.获取授权码 上述两步百度都有. 源码: #!/usr/bin/env python from email.mime.te ...
- selenium webdriver自动化对日期控件的处理
用JS去掉日期输入框的readOnly属性. 代码如下: ----------------------------------------------------------------------- ...
随机推荐
- crawlSpider全站爬取 分布式
# 如何提升scrapy爬取数据的效率? 推荐: 单线程加异步协程 增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings.py中修改 CONCURRENT_REQU ...
- $ git push -u origin master
我们第一次推送master分支时,由于远程库是空的,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来 ...
- 动态规划: 最大m子段和问题的详细解题思路(JAVA实现)
这道最大m子段问题我是在课本<计算机算法分析与设计>上看到,课本也给出了相应的算法,也有解这题的算法的逻辑.但是,看完之后,我知道这样做可以解出正确答案,但是我如何能想到要这样做呢? 课本 ...
- VBA 学习笔记 - 运算符
学习资料:https://www.yiibai.com/vba/vba_operators.html 算术运算符 加减乘除模指,这个没啥特别的. 比较运算符 和 Lua 相比,判断相等变成了一个等于号 ...
- ubuntu 16 “无法获得锁”解决方案
强制解锁,命令 sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock
- C语言函数不能返回数组,但可以返回结构体
为什么C语言函数可以返回结构体,却不可以返回数组?有这样的问题并不奇怪,因为C语言数组和结构体本质上都是管理一块内存,那为何编译器要区别对待二者呢? C语言函数为什么不能返回数组? 在C语言程序开发中 ...
- 解决el-input 触发不了键盘事件
<el-input v-model="form.loginName" placeholder="账号" @keyup.enter="doLogi ...
- 吴裕雄 python 神经网络——TensorFlow 数据集高层操作
import tempfile import tensorflow as tf train_files = tf.train.match_filenames_once("E:\\output ...
- eclipse修改工作空间编码格式
一.修改workspace默认编码 eclipse打开window -> 打开preferences 二.修改jsp默认编码 eclipse打开window -> 打开preference ...
- MSE初始化和基本操作
MSE默认的登录账户密码可能是:login/password (admin/admin). l 初始化配置完成后,下次使用root登录时,仅显示Linux shell提示符,而不是安装脚本. 您可以随 ...