使用selenium实现自动操作网页

前记

之间有一段时间在维护部门帮忙打下手,每天会做一些主机巡检之类的活,然后把结果写到一个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="[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
2、 发送邮件命令

s-nail -vs “邮件主题” [email protected] < result.txt --多个邮箱用逗号隔开(带有附件的发送)

echo “邮件正文” | mail -s 邮件主题 [email protected]

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 日报上传 [email protected]

4、效果

使用selenium实现自动操作网页_第1张图片

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

你可能感兴趣的:(python,python,经验分享)