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

#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(‘文件上传成功’)

https://www.freebuf.com/sectool/197756.html

标签