python2.x+selenium2.x实现自动删除邮件功能

        公司项目有异常通知机制,每当应用出现无法处理的异常时,就会发送短信和邮件给相关的开发人员。这个邮件一天会收到好多封,一个月下来,邮箱都快满了。删除邮件每次都是跳转到最后一页,然后一次性只能选择20条记录删除。一千来封的邮件要删到何年何月额。之前做自动化测试的时候玩过selenium,印象深刻,可以模拟操作网页,何不用这个来做自动删除?

环境搭建

    首先我们要搭建python运行环境,来跑我们的脚本。

1、去官网下载python2.7,地址:https://www.python.org/。下载完成后安装好,并将python目录配置到系统环境变量中去。如果在cmd窗口敲python -V,提示python版本了,就说明安装成功了。如下图所示:

2、安装selenium模块

     python通过pip来安装模块,先运行pip -V,看是否有pip模块,如果提示版本说明有,如图所示:

通过如下命令安装selenium模块:

pip install selenium==2.53.0

这样运行selenium脚本的环境就有了!

接下来我们来搭建操作浏览器的selenium服务器。

1、安装chrome浏览器(略)。

2、去selenium官网下载selenium-server-standalone.jar,地址:http://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.0.jar。下载完成后,放入文件夹下面,例如:d:\pythonscript。

3、下载chromedriver.exe,地址:https://code.google.com/p/chromedriver/downloads/list,注意和chrome的版本的匹配。下载完成后放入d:\pythonscript目录。

4、运行selenium-server-standalone,命令如下:

java -jar selenium-server-standalone-2.46.0.jar -timeout=20 -browserTimeout=60 -Dwebdriver.chrome.driver=D:\pythonscript\chromedriver.exe

运行截图如下:

业务需求

        我司的邮件系统登录成功后,地址栏地址并没有改变,可能是前后端分离方案做的。之前以为是登录成功后,会像cookie中写入值,通过这个cookie来持有登录状态。这样我登录一次后,重新写入这个cookie,就可以直接登录,进行处理了。后来发现,登录后邮件链接后面跟上一个sessionId后就可以直接操作列表了,更换浏览器也可以。这样问题就大大简化了,我只需要登录一次,然后保存好sessionId,然后在脚本里请求即可。最后的删除脚本如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-

'''
自动删除邮件(这里只是删除到垃圾箱,并没有释放空间,为了防止误删,请自行清空垃圾箱来释放空间。)
0、下载chromedriver.exe
1、下载selenium-server-standalone.jar,然后运行
2、安装python 2.7,安装pip模块
3、install selenium模块
@author gameloft9 2018.10.15
'''

from selenium import webdriver;
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities;
from selenium.webdriver.common.by import By;
import time;
import sys;

'''
全局参数
'''
# 设置sessionId和需要删除的邮件页数
# 先登录,然后填入sessionId
sessionId = "g703f97f3e313f289ef28c1f25fb829ab6j9p9p8obl";
# 删除多少页	
repeatTimes = 20;

# 远程driver地址,需要自己搭建selenium-server
remoteUrl = "http://127.0.0.1:4444/wd/hub";
#邮件列表地址
checkEmailUrl = "https://mail.xxx.com/xx/mail/xxx.html?sessionid="+sessionId;
	
# 智能find
def smart_find_element(driver,byType,value):
    ele = None;
    max_time = 10; # 最多允许重试10次
    times = 0;
    while(ele == None):
        try:
            ele = driver.find_element(byType,value);
        except :
            times += 1;
            if(times > max_time):
                raise Exception(u'查找元素超过最大次数');
            time.sleep(1); #休息1s
    if(ele != None):
        return ele;

# 获取远程浏览器driver,使用自己指定的selenium-server
def getChromeRemoteDriver(remoteUrl):
    return webdriver.Remote(command_executor=remoteUrl,desired_capabilities=DesiredCapabilities.CHROME)

# 获取本地浏览器driver,需要安装chromedriver.exe,并设置到环境变量中
def getChromeLocalDriver():
	return webdriver.Chrome()
	
# 默认登录,需要自己先登录,然后替换sessionId值
def deleteEmails(driver):
	driver.get(checkEmailUrl);
	
	# 循环处理
	count = 0;
	while (count < repeatTimes):
		print u'正在处理第 ',count,u' 页';
		count = count + 1
		# 到最后一页
		lastPage = smart_find_element(driver,By.XPATH,"html/body/form/table[3]/tbody/tr[4]/td[2]/div/a[2]");
		lastPage.click();
		
		# 点击全选
		selectAllElement = smart_find_element(driver,By.XPATH,"html/body/form/table[3]/tbody/tr[4]/td[1]/a[1]");
		selectAllElement.click();
		
		# 点击删除
		deleteAllElement = smart_find_element(driver,By.XPATH,"html/body/form/table[3]/tbody/tr[3]/td/input[1]");
		deleteAllElement.click();
		
		# 休息
		time.sleep(2);
	
# 入口
try:
	driver = getChromeRemoteDriver(remoteUrl)
	deleteEmails(driver);
	print u'恭喜!处理完毕!'
except Exception,arg:
	print u'运行发生异常',arg,u'即将退出';
finally:
	driver.quit();


这样登录一次,然后设置好参数,自动跑脚本,邮件就可以删除了,大大节省了时间。

参考链接:Selenium-Server-Standalone搭建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值