前记
之间有一段时间在维护部门帮忙打下手,每天会做一些主机巡检之类的活,然后把结果写到一个Excel中,最后上传到集团的一个网站上,集团会以这个报告作为分公司的年度考核之一,既然有考核,那么excel中记录的肯定都是合格啊、正常啊这类好看好听的话了。所以每天传这个文档也变的既重要又敷衍。因此,我学着写了一个自动传文档的脚本,使用python利用selenium来实现自动上传,并且在上传成功后自动发送邮件来通知我上传结果。
1、脚本内容如下
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():
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")
browser
= webdriver
.Chrome
(chrome_options
= chrome_options1
)
browser
.implicitly_wait
(10)
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
()
n
= browser
.window_handles
print('当前句柄: ', n
)
browser
.switch_to_window
(n
[-1])
print('点击导入按钮')
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
()
def get_ele_time(driver
,time
,func
):
return WebDriverWait
(driver
,time
).until
(func
)
if __name__
== '__main__':
ui_auto_operation
()
2、自动发送邮件
1、Linux下安装邮件服务
apt install heirloom-mailx -y
vi /etc/s-nail.rc
配置邮箱服务:
set from
="xxxxx@163.com"
set smtp
="smtps://smtp.163.com:465"
set smtp-auth-user
="xxxxxx@163.com"
set smtp-auth-password
="xxxx"
set smtp-auth
=login
set from
="xxxx@outlook.com"
set smtp
="outlook.office365.com:587"
set smtp-auth-user
="xxxx@outlook.com"
set smtp-auth-password
="xxxx"
set smtp-use-starttls
set ssl-verify
=ignore
set smtp-auth
=login
set from
="180347XXXXX@qq.com"
set smtp
="smtps://smtp.qq.com:465"
set smtp-auth-user
="1803472613@qq.com"
set smtp-auth-password
="hfzusrsjuowfdacalastethisistest"
set smtp-auth
=login
2、 发送邮件命令
s-nail -vs “邮件主题” XXXX@XXX.com < result.txt --多个邮箱用逗号隔开(带有附件的发送)
echo “邮件正文” | mail -s 邮件主题 XXXX@XXX.com
3、配置crontab每天定时上传并发送邮件 (第一条是将执行脚本过程中产生的日志记录到111.txt文件中,第二条获取日志倒数第二行作为邮件内容)
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 日报上传 XXXX@XXX.com
4、效果
从此不再为了忘记传日报而发愁…