def mkdir(): dirs = ["반품완료", "취소완료", "발주발송(발송처리일)"] comm = commDir comm += "결과파일/" api.mkdir(comm) day = api.getYear() + api.getMonth() comm += day + "/" api.mkdir(comm) day += api.getDay() comm += day + "/" api.mkdir(comm) for d in dirs: api.mkdir(comm + d) #로그 폴더 생성 api.mkdir("{}log".format(comm)) # 로거 설정 logFileName = "{}/log/{}{}{}.log".format(comm, api.getYear(), api.getMonth(), api.getDay()) failFileName = "{}/log/{}{}{}_보고파일.csv".format(comm, api.getYear(), api.getMonth(), api.getDay()) global logger logger = api.getLogger(logFileName, "naver_daily_selling") global failLog failLog = api.failHistory(failFileName, "naver_daily_fail") failLog.info("***********재다운로드 필요 항목***********")
from os import remove import shutil import sys import os from selenium.webdriver.common.keys import Keys # 실행 시 cmd 창 맨위에 놓으면 크롤링 시 버튼 인식 안되니 cmd 창 내려놓고 실행해야함 ########################################################################################################################################################################### # 1. RPA에서는 안되는 멀티 프로세싱 기능을 적용해서 이론 상 RPA 보다 해당 PC의 코어수 만큼 병렬처리(동시에 실행)하여 시간 단축 가능 # 2. 처음에는 팝업창을 제거 해줘야만 그 뒤에 있는 화면의 버튼 요소들이 인식 가능한 줄 알았음 -> 여러개 팝업창이 뜰 가능성이 있어서 모든 팝업창에 대해 대기시간을 놓고 인식을 # 대기하는 과정이 필요 했음 -> 개발 중 팝업창을 제거하지 않아도 frame 순서만 변경해주면 팝업창 떠있는 상태로 조작 가능함을 알게됨 -> 시간 단축 # 3. 현재 RPA로 개발된 프로그램보다 코드 길이가 훨씬 짧음 -> 기존에는 홈페이지 변경 시 프로그램마다 변경 필요했으나 추상화를 적용해서 유지보수 시에도 공통 영역의 코드 변경 시 일괄 적용이 가능해짐 # 4. 위 내용을 종합적으로 시간 단축 가능, RPA 라이선스 미사용으로 금액 절감 가능 # 5. 파이썬 적용 시 파이썬을 배워야하고, 관리 측면에서 RPA와 파이썬을 둘 다 관리해야 한다는 단점이 있긴 함 ########################################################################################################################################################################### commDir = "C:/Users/Administrator/Desktop/naver/" downPath = "{}결과파일/{}{}/{}{}{}/".format(commDir, api.getYear(), api.getMonth(), api.getYear(), api.getMonth(), api.getDay()) errors = [] mypath = os.path.dirname(os.path.realpath(__file__)) logger = None failLog = None def mkdir(): dirs = ["반품완료", "취소완료", "발주발송(발송처리일)"] comm = commDir comm += "결과파일/" api.mkdir(comm) day = api.getYear() + api.getMonth() comm += day + "/" api.mkdir(comm) day += api.getDay() comm += day + "/" api.mkdir(comm)
def setDownloadPath(pid): options = webdriver.ChromeOptions() options.add_experimental_option("prefs", {"download.default_directory": r"{}\{}{}\{}{}{}\{}".format(r"C:\Users\Administrator\Desktop\naver\결과파일", api.getYear(), api.getMonth(), api.getYear(), api.getMonth(), api.getDay(), pid) }) return options
pool = multiprocessing.Pool(num_cores) err = False try: stores = api.divideWork( "{}{}{}".format(naver.nowPath, api.delimeter, naver.data["workFileName"][shop]), num_cores) except Exception as e: err = True naver.adminLog.error("{}: 일감 분리 실패(일감 파일 읽기 불가능)".format(e)) pool.map(main, stores) pool.close() line = 0 day = "{}{}{}".format(api.getYear(), api.getMonth(), api.getDay()) filename = r"{}_{}_Report.csv".format(day, shop) filenames = ["{}".format(filename)] filename = r"{}{}log{}{}".format(downPath_win, api.delimeter, api.delimeter, filename) home = "/home/rpa01/rpa_naver_brandmall" # Windows면 경로 변경 if api.delimeter == "\\": home = "." try: os.system('{}/sftp.sh 2> {}/sftp.log {}'.format(home, home, filename)) naver.adminLog.info("{}파일 정상적으로 sftp전송 완료".format(filename)) except Exception as e: naver.adminLog.error("{}파일 정상적으로 sftp전송 실패 | {}".format(filename, e)) naver.delay(5)