업무 자동화로 귀찮은 반복 작업 줄이기 (Python + Selenium + Excel 연동)
업무 중 반복되고 귀찮은 작업이 있어서 직접 자동화를 만들어봤다. 보안 이슈로 인해 실제 업무와는 다소 각색했음을 미리 밝힌다.
우리 팀에서는 매주 상품 결제 후, 환불 요청을 서비스운영팀에 전달하는 업무를 담당한다. 이 과정에서 ‘팀, 요청자, 상품 ID, 상품명, 상품 가격, 구매 ID’ 등의 데이터를 일일이 입력해야 한다. 문제는 이 모든 항목들이 각각의 개별 입력칸으로 나눠져 있어서, 복붙을 하더라도 계속 커서를 옮기고 값을 입력하는 작업이 반복된다.
표 형식의 엑셀로 데이터를 정리해도 사람이 직접 웹페이지의 input 필드를 클릭하고, 복사한 값을 붙여넣는 건 꽤나 번거로운 일이다. 그래서 자동화 코드를 작성하게 되었다.
자동화 설계 개요
자동화의 핵심 아이디어는 간단하다.
- 결제/환불 내역이 담긴 엑셀 파일을 읽어오고,
- Selenium을 통해 웹 브라우저를 자동으로 조작해
- 입력 필드에 필요한 정보를 자동으로 입력하고
- 환불 요청서를 임시 저장한다.
임시 저장 후에는 사람이 검토하고, 제목/내용 등을 다듬어서 실제 요청을 접수하면 된다.
자동화에 사용한 주요 기술과 코드
자동화에는 Python의 Selenium, openpyxl 라이브러리를 사용했다. 중요하게 사용된 몇 가지 기술적 포인트는 다음과 같다.
1. 새 탭 전환 코드
Selenium에서 driver.get()으로 새 페이지를 열었을 때, 새로운 탭(또는 창)으로 열린 경우에는 반드시 해당 탭으로 포커스를 이동해줘야 한다.
- new_driver = driver.window_handles
- driver.switch_to.window(new_driver[-1]) #새로 열린 탭으로 전환
2. 스크롤 내리기
웹페이지가 동적으로 구성되어 있으면 특정 위치까지 스크롤을 내려야 요소가 로딩되기도 한다.
- driver.execute_script("window.scrollBy(0, 1000);") #스크롤 내리기
3. 활성화된 input 칸에 키 입력
셀 단위로 구성된 입력칸에 ActionChains를 사용해서 키보드 조작처럼 데이터를 입력했다.
- actions = ActionChains(driver)
- actions.send_keys("입력할 값").perform() #활성화된 칸에 값 입력
- actions.send_keys(Keys.TAB).perform() #활성화된 칸에서 TAB 입력
4. 엑셀 파일 읽기
openpyxl을 사용해 엑셀 파일의 특정 시트를 읽고 반복문을 통해 한 줄씩 데이터를 받아오는 식으로 구현했다.
- from openpyxl import load_workbook
- wb = loadworkbook("파일경로.xlsx", read_only=True)
- sheet = wb["결과"]
- for row in sheet.iter_rows(min_row=3, values_only=True): #각 행의 데이터를 리스트로 저장
자동화 개발하며 느낀 점
자동화를 개발하면서 느낀 가장 중요한 포인트는 전체적인 설계 능력이다. 예를 들어 로그인 절차만 해도 상황이 다양했다.
- 로그인 페이지에서 처음부터 로그인해야 하는 경우
- 기존 세션이 있어서 버튼 한 번만 누르면 되는 경우
- 로그인 상태지만 추가 인증이 필요한 경우
이처럼 조건 분기가 필요한 로직에서는 다양한 시나리오를 사전에 고려해야 한다. 그리고 웹 구조에서 XPATH를 사용할 때에도 단순히 복사한 XPATH에 의존하지 않고, 반복되는 요소들(tr[1], tr[2] 등)을 반복문으로 처리할 수 있는 구조로 이해하는 것이 중요했다.
또한 오류가 발생했을 때 단순히 멈추는 것이 아니라 "왜 안 되는 걸까?"를 추론하는 능력도 키워졌다. 예를 들어, 새창을 띄운 후 특정 요소에 접근이 안 됐을 때, "아 새창 전환 처리를 안했구나" 하고 driver.switch_to.window() 코드를 넣는 방식으로 해결한 적도 있다.
피드백과 개선 방향
동료들에게 코드를 공유하고 테스트해보도록 권유했다. 동료들의 PC에서도 자동화가 정상적으로 동작했고, 매번 반복되던 귀찮은 작업들이 크게 줄었다. 하지만 사용자의 입장에서 더 편리하게 개선할 수 있는 피드백도 받았다.
- 실행 파일로 만들어서 배포하면 좋겠다.
- GUI를 적용해서 사용자에게 필요한 정보(ID, 파일 경로, 건수 등)를 입력받는 UI가 있으면 더 좋겠다.
이 부분은 나도 생각하지 못했던 부분인데, 단순히 "코드 짜는 것"에만 집중하다 보니 실제 사용하는 사람 입장에서의 경험을 놓쳤던 것 같다. 그래서 앞으로는 tkinter 등을 사용해 간단한 GUI를 붙여보는 실습을 해보고자 한다. 또한 자동화 코드의 유지보수를 위해 POM 모델(Page Object Model) 개념도 함께 공부해서 적용할 수 있도록 해볼 계획이다.
자동화라는 것은 단순히 시간을 줄이는 도구만은 아닌 것 같다. 반복되는 작업에 쏟는 에너지를 줄여서, 더 창의적이고 중요한 일에 집중할 수 있도록 도와준다. 직접 자동화를 만들어보면서 코드 작성 능력뿐 아니라 웹 구조를 분석하고, 문제 상황에서 추론하고 해결하는 능력까지 함께 성장했다는 느낌이 든다. 앞으로도 반복되는 불편함이 있다면 과감하게 자동화를 시도해보고, 사용자 입장에서의 편의성도 함께 고려할 수 있도록 노력해보려고 한다.
'QA 테스트 자동화' 카테고리의 다른 글
Selenium으로 네이버 중고나라 iframe 웹 구조 분석해서 검색 결과 제목 출력 자동화하기 (1) | 2025.06.29 |
---|---|
Selenium으로 인스타그램 키워드 검색 후 자동으로 좋아요 누르는 방법 (실습 예제 포함) (0) | 2025.06.22 |
selenium webdriver 원하는 검색어 입력 후 검색 결과 엑셀 파일로 저장하기 (0) | 2025.06.08 |
Appium 기초 프로그램 실행 환경 구성 및 간단 예제 코드 실행 (0) | 2025.05.28 |
Appium 테스트 자동화 디바이스 드라이버 UIAutomator2, XCUITest 작동 원리 (0) | 2025.05.23 |