分享

Selenium初探之自动备份设备配置文件及上传

 昵称62125662 2020-02-09
#coding=utf-8
import os
import time
import logging
import ftplib
from ftplib import FTP
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys importKeys
from selenium.webdriver.support.ui import Select
from selenium.webdriver importDesiredCapabilities
from selenium.webdriver.chrome.optionsimport Options
Device = 'WAF'     #定义设备类型
IP = 'x.x.x.x'         #目标IP
dir_time = time.strftime('%Y-%m-%d',time.localtime())
#输出当前"年-月-日"时间
dir_backup =f'/opt/sec_backup/{IP}_{Device}/{dir_time}'
#chrome下载的地址备份文件的路径
log_name =f'/opt/sec_backup/log/{IP}/{dir_time}.log'
#存放日志文件的路径
if os.path.exists(dir_backup):
pass
else:
os.mkdir(f'/opt/sec_backup/{IP}_{Device}/{dir_time}')
#创建dir_backup路径
host = 'X.X.X.X'
port = 21
user = 'XXXX'
pwd = 'XXXXX'
#以上定义FTP服务器相关信息
logging.basicConfig(filename=log_name,level=logging.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
#定义日志输出格式
try:
opts = Options()
opts.headless=True
opts.add_argument('--no-sandbox')
opts.add_argument('--disable-gpu')
capabilities = DesiredCapabilities.CHROME.copy()
capabilities['acceptSslCerts'] = True
capabilities['acceptInsecureCerts'] = True
prefs = {'download.prompt_for_download': False,
'download.directory_upgrade': True,
'safebrowsing.enabled': False,
'safebrowsing.disable_download_protection': True}
opts.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(options=opts,desired_capabilities=capabilities)
#以上是“无头”的一些配置,具体就不一一展开
driver.implicitly_wait(10)
#设置超时时间10秒钟
driver.command_executor._commands["send_command"] =("POST",'/session/$sessionId/chromium/send_command')
driver.desired_capabilities['browserName'] = 'ur mum'
params = {'cmd': 'Page.setDownloadBehavior', 'params': {'behavior':'allow', 'downloadPath': '%s' %dir_backup }}
driver.execute("send_command", params)
#Chrome下载备份文件到dir_backup目录
driver.get(f"https://{IP}/login/requireLogin")
driver.find_element_by_id("username").send_keys("xxx")
driver.find_element_by_id("password").send_keys("xxx")
driver.find_element_by_id("loginButton").click()
driver.find_element_by_id("one3").click()
driver.find_element_by_id("two32").click()
driver.switch_to.frame("mainFrame")
driver.find_element_by_link_text("配置同步").click()
driver.find_element_by_xpath("(//input[@id='tmp'])[2]").click()
time.sleep(30)
driver.switch_to.alert.accept()
driver.find_element_by_xpath("//*[@id='backpointtable']/tbody/tr[2]/td[5]/img[3]").click()
while True:
if os.listdir(dir_backup) andos.listdir(dir_backup)[0].endswith('.wafc'):
#备份周期是天,一天只生成一个固定目录,里面只有一个备份文件,故判断是否有文件即可
logger.info('备份成功')
break
else:
continue
driver.find_element_by_link_text("配置同步").click()
driver.find_element_by_xpath("//*[@id='backpointtable']/tbody/tr[2]/td[5]/img[4]").click()
confirm2 = driver.switch_to.alert
confirm2.accept()
driver.quit()
#logger.info('删除旧备份成功')
except Exception as e:
logger.info(f"自动备份出现异常,异常内容:{e}")
def ftpconnect():
ftp_server = host
username = user
password = pwd
ftp = FTP()
ftp.set_debuglevel(0)
ftp.connect(ftp_server, 21)
ftp.login(username, password)
return ftp
def uploadfile():
try:
ftp = ftpconnect()
remotepath = ftp.mkd(f'/{IP}-{Device}/{dir_time}')
except:
pass
ftp.cwd(remotepath)
bufsize = 1024
localfile = dir_backup + '/' + os.listdir(dir_backup)[0]
remotefile = os.listdir(dir_backup)[0]
print(localfile)
fp = open(localfile, 'rb')
ftp.storbinary('STOR ' + remotefile, fp, bufsize)
#上传本地localfile,至remotepath,并命名remotefile
ftp.set_debuglevel(0)
#关闭ftp的调试模式,如果设置为2,则输出详细信息
fp.close()
if __name__ == '__main__':
try:
uploadfile()
except Exception as e:
logger.info(f"文件上传出现异常,异常内容:{e}")
else:
logger.info('文件上传成功')

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多