之间有一段时间在维护部门帮忙打下手,每天会做一些主机巡检之类的活,然后把结果写到一个Excel中,最后上传到集团的一个网站上,集团会以这个报告作为分公司的年度考核之一,既然有考核,那么excel中记录的肯定都是合格啊、正常啊这类好看好听的话了。所以每天传这个文档也变的既重要又敷衍。因此,我学着写了一个自动传文档的脚本,使用python利用selenium来实现自动上传,并且在上传成功后自动发送邮件来通知我上传结果。
#!/usr/bin/env python
# coding=utf-8
from selenium import webdriver
from datetime import datetime
import os
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# 自动化操作运维系统日报导入功能
def ui_auto_operation():
# 模拟登陆
# rep = requests.Session()
chrome_options1 = webdriver.ChromeOptions()
chrome_options1.add_argument('--headless')
chrome_options1.add_argument('--disable-gpu')
chrome_options1.add_argument("window-size=1024,768")
chrome_options1.add_argument("--no-sandbox") #沙箱运行
#driver = webdriver.Chrome(chrome_options=chrome_options1)
#browser = webdriver.Chrome() #模拟谷歌浏览器操作
browser = webdriver.Chrome(chrome_options = chrome_options1)
browser.implicitly_wait(10) # 设置隐性等待,等待10S加载出相关控件再执行之后的操作
browser.maximize_window()
#换成自己的网址
browser.get('http://XXXXXXX')
# 输入用户名
username = browser.find_element_by_xpath('/html/body/div/div[1]/div[2]/form/div[1]/input')
print('testusername')
username.clear()
username.send_keys('XXXXX')
print('username input success')
# 输入密码
password = browser.find_element_by_xpath('/html/body/div/div[1]/div[2]/form/div[2]/input')
password.clear()
password.send_keys('XXXXX')
print('password input success')
# 点击登陆
browser.find_element_by_xpath('/html/body/div/div[1]/div[2]/form/button').click()
print('login success')
# 爬取对应网页的数据
browser.current_window_handle
print('点击健康度')
browser.find_element_by_xpath('/html/body/div/div[1]/div[1]/ul/div[2]/li[1]/div[1]').click()
print('点击健康度导入')
browser.find_element_by_xpath('/html/body/div/div[1]/div[1]/ul/div[2]/li[1]/div[2]/ul/li[2]').click()
#next_click.click() # 模拟点击下一页的时候,会出现一个新窗口或者新标签
n = browser.window_handles # 这个时候会生成一个新窗口或新标签页的句柄,代表这个窗口的模拟driver
print('当前句柄: ', n) # 会打印所有的句柄
browser.switch_to_window(n[-1]) # driver切换至最新生产的页面
print('点击导入按钮')
#browser.find_element_by_xpath('/html/body/div/div[2]/div/div[1]/div/div[3]/div/button/span').click()
time.sleep(10)
upload = browser.find_element_by_xpath('/html/body/div[1]/div[2]/div/div[1]/div/div[3]/div/input')
upload.send_keys('/home/admin/cz/Google/Asiainfo.xlsx')
err = get_ele_time(browser,2,lambda driver: driver.find_element_by_xpath('/html/body/div[2]')) #这里获取界面返回的上传结果
print(err.text+datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
time.sleep(10)
print('操作完成即将关闭浏览器')
time.sleep(3)
browser.close()
browser.quit()
# 捕获div弹出提示信息
def get_ele_time(driver,time,func):
return WebDriverWait(driver,time).until(func)
if __name__ == '__main__':
# @version : 3.4
# @Author : cz
# @Software: PyCharm Community Edition
ui_auto_operation()
apt install heirloom-mailx -y
vi /etc/s-nail.rc
配置邮箱服务:
# s-it-mode
###for 163邮箱
set from="[email protected]" #发件地址
set smtp="smtps://smtp.163.com:465" #smtp服务器
set smtp-auth-user="[email protected]" #登录发件地址
set smtp-auth-password="xxxx" #明文密码
set smtp-auth=login #登录方式,默认是login,也可以改成CRAM-MD5或PLAIN方式
###for outlook
set from="[email protected]"
set smtp="outlook.office365.com:587"
set smtp-auth-user="[email protected]"
set smtp-auth-password="xxxx" #明文密码
set smtp-use-starttls #加密方式
set ssl-verify=ignore # 忽略ssl认证
set smtp-auth=login
###for QQ mail
set from="[email protected]"
set smtp="smtps://smtp.qq.com:465"
set smtp-auth-user="[email protected]"
set smtp-auth-password="hfzusrsjuowfdacalastethisistest" #QQ邮箱授权码
set smtp-auth=login
s-nail -vs “邮件主题” [email protected] < result.txt --多个邮箱用逗号隔开(带有附件的发送)
echo “邮件正文” | mail -s 邮件主题 [email protected]
05 23 * * * root python3 /home/admin/cz/Google/localTest.py < 111.txt
07 23 * * * root cat /home/admin/cz/Google/111.txt | tac | sed -n ‘2p’ | mail -s 日报上传 [email protected]