본문 바로가기
IT Information/DevOps

개인 프로젝트 리뷰 - Crawling Mail

by foons 2022. 10. 30.
반응형

프로젝트 상에서 사용되는 파일은 (금융사에서 전달하는 Mail 파일)은 HTML 로 제공되고 있습니다.

 

하여 해당 HTML 파일을 열고, 제가 원하는 xlsx 로 다운받는 Function 을 찾아 클릭해야 합니다.

 

이를 위해 selenium 을 사용하였고, Chrome 보다는 가벼운 Firefox 를 사용하였습니다.

 

ford_html = glob2.glob('/data/mail/*.html') 
ago_date = datetime.date.today() - timedelta(days=30)
down_dir = "/data/mail/" ## pvc 경로
binary = FirefoxBinary('/opt/firefox/firefox')

매월 새로운 파일만을 작업하기 위해 시간을 설정하였고, glob2 를 통하여 여러 파일을 리스트 형태로 조회하는데 사용합니다.

 

opts = FirefoxOptions()
opts.add_argument("--headless")
opts.add_argument("--no-sandbox")
opts.add_argument("--disable-dev-shm-usage")
opts.set_preference("browser.download.folderList", 2)
opts.set_preference("browser.download.manager.showWhenStarting", False)
opts.set_preference("browser.download.dir", down_dir)
fox = webdriver.Firefox(options=opts,executable_path='/usr/local/bin/geckodriver',firefox_binary=binary)

firefox 를 사용하기 위한 webdriver 파일인 geckodriver 를 사용하였고, EKS Pod 에서 실행될 예정이기에 headless 옵션과 여러가지 옵션 값을 사용 하였습니다.

 

for i in ford_html:
    if int((os.path.basename(i).split("_")[-1]).split(".")[-2]) < int(str(ago_date.strftime("%Y%m%d"))):
        print(int((os.path.basename(i).split("_")[-1]).split(".")[-2]))
        continue

위 glob2 를 사용하여 나온 list 결과 값 중 실제 필요한 파일을 조건처리하여 작업되고 있습니다.

 

else:
    fox.get('file://'+i)
    fox.find_element(by=By.XPATH, value="//*[@id=\"account\"]/div[1]/div/div/ul/li[2]").click()
    fox.find_element(by=By.XPATH, value="//*[@id=\"div_이용\"]/div/div[1]/ul/li[3]/a").click()
    fox.execute_script("save2Xls_new('usage')")

html 파일에서 위 이미지와 같이 button 으로 정의되어 있는 모습

실제 조건에 해당되는 값은 파일을 Open 하고, html 상에서 내가 필요한 button 값을 찾아 Click 하는 방법입니다.

Div 요소를 찾아 button 이 동작할때 작동하는 javascript function 을 호출합니다.

 

 

Code 가 궁금하시다면 하단의 링크를 참고 부탁드립니다.

https://github.com/foonsoo/project/tree/master/save_money/python/logic/file_craw

반응형