콘솔워크

[selenium] 웹에서 파일을 다운 받은 후 이름을 변경하는 함수 본문

프로그래밍/python

[selenium] 웹에서 파일을 다운 받은 후 이름을 변경하는 함수

이휘재123 2022. 7. 18. 17:02
반응형
import shutil
from selenium.webdriver.common.by import By

	# 폴더내 파일 전체 삭제
    def delete_all_files(self, download_path):
        if os.path.exists(download_path):
            for file in os.scandir(download_path):
                os.remove(file.path)
            return 'Remove All File'
        else:
            return 'Directory Not Found'


    # 경로의 파일 갯수 체크
    def dir_search(self, download_path):
        file_len = len(os.listdir(download_path))
        print('파일갯수: ' + str(file_len))
        return file_len


    # 다운로드
    def download_excel(self, download_path):
        driver = self.driver
        # 폴더가 없으면 생성
        if os.path.isdir(download_path) == False:
            os.mkdir(download_path)
        else:
            print(f'이미 폴더가 있습니다.')

        # 폴더안에 이미 존재하는 파일 삭제
        print(f'{self.delete_all_files(download_path)}')

		# 폴더안의 파일 갯수 (다운로드 확인에 사용)
        before_file_len = self.dir_search(download_path)

        # 다운로드 버튼 클릭 (실패 시 무한반복)
        downloaded = False
        while downloaded == False:
            try:
                # 다운로드 클릭
                download_button = driver.find_element(By.CSS_SELECTOR, 'div[onclick*="javascript:doExcelDownload()"]')
                download_button.click()
                # 확인 클릭
                ok_button = driver.find_element(By.CSS_SELECTOR, '#button-1006')
                ok_button.click()
                downloaded = True
            except Exception as e:
                downloaded = False

            
        # 다운로드 완료 여부를 5초에 한번씩 체크
        after_file_len = self.dir_search(download_path)
        while before_file_len == after_file_len:
            print('대기중...')
            after_file_len = self.dir_search(download_path)
            time.sleep(5)


        try: # 가장 최근에 다운받은 파일 이름을 변경
            new_file_name = max([download_path + "\\" + f for f in os.listdir(download_path)],key=os.path.getctime)
            shutil.move(new_file_name,os.path.join(download_path,r"myfile.xlsx"))
            new_file_name = download_path + "\\" + r"myfile.xlsx"
            print(f'{new_file_name}')
        except Exception as e:
            print(e)
            self.log_append(f'{download_path} 파일 찾기 실패')
            print('파일명 변경 실패')

        return new_file_name

일정 시간에 한번씩 실행하기 위해 제작한 코드

반응형