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