使用selenium实现自动操作网页

it2023-10-09  72

前记

之间有一段时间在维护部门帮忙打下手,每天会做一些主机巡检之类的活,然后把结果写到一个Excel中,最后上传到集团的一个网站上,集团会以这个报告作为分公司的年度考核之一,既然有考核,那么excel中记录的肯定都是合格啊、正常啊这类好看好听的话了。所以每天传这个文档也变的既重要又敷衍。因此,我学着写了一个自动传文档的脚本,使用python利用selenium来实现自动上传,并且在上传成功后自动发送邮件来通知我上传结果。

1、脚本内容如下

#!/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()

2、自动发送邮件

1、Linux下安装邮件服务
apt install heirloom-mailx -y vi /etc/s-nail.rc

配置邮箱服务:

# s-it-mode ###for 163邮箱 set from="xxxxx@163.com" #发件地址 set smtp="smtps://smtp.163.com:465" #smtp服务器 set smtp-auth-user="xxxxxx@163.com" #登录发件地址 set smtp-auth-password="xxxx" #明文密码 set smtp-auth=login #登录方式,默认是login,也可以改成CRAM-MD5或PLAIN方式 ###for outlook 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 # 忽略ssl认证 set smtp-auth=login ###for QQ mail set from="180347XXXXX@qq.com" set smtp="smtps://smtp.qq.com:465" set smtp-auth-user="1803472613@qq.com" set smtp-auth-password="hfzusrsjuowfdacalastethisistest" #QQ邮箱授权码 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、效果

从此不再为了忘记传日报而发愁…

最新回复(0)