[ AutomateOne 실습 ] 오피넷에서 구 별 유가 정보 가져오기

jwKim·2023년 8월 13일

AutomateOne을 사용해 진행한 첫 번째 자동화 프로젝트이기 때문에 많이 상세하게 써놓았다.



1. 요구사항 및 설계

이번 실습의 요구사항은 다음과 같다.

전국 유가 정보를 확인할 수 있는 오피넷 (https://www.opinet.co.kr/user/main/mainView.do)에 접속해서 강남구, 송파구, 서대문구, 중구, 중랑구 별 "우리동네 싼 주유소 TOP 5" 테이블을 하나의 엑셀파일에 저장할 것

위 요구사항에 맞춰 프로그램을 설계하면 아래와 같다.



2. 구현

2-1. 변수 선언

변수를 선언하는 액션을 한 번에 수행할 수 있도록 액션그룹 하나로 묶어주었다. 선언할 변수는 V.오늘날짜, 엑셀 파일을 저장할 디렉토리인 V.결과폴더, 엑셀파일의 디렉토리인 V.엑셀파일, 조회할 구 정보를 담고있는 V.구리스트이다.

특별히 "V.구리스트" 변수는 문자열 분할 액션을 사용하여 여러 개의 구 정보를 한 번에 받았다.

※ "전역변수로 설정" 파라미터를 사용하게 되면, 이 변수가 있는 태스크 밖에서도 사용 가능하다.(다른 패키지일 경우에는 당연히 안됨)

2-2. 엑셀 파일 생성 및 웹페이지 접속

최초에 엑셀파일을 여는 액션과 웹페이지에 접속하는 액션을 하나의 그룹으로 묶어주었다.

엑셀 파일에 어떤 작업을 할 때에는 항상 세션을 생성해 주어야 한다. 세션을 열 때에는 두 가지 작업을 해주어야한다.

  1. 엑셀파일을 저장할 이름 지정 : 파일 이름은 절대경로로 지정한다. 앞서 변수 선언 부분에서 선언한 "V.엑셀파일"을 사용한다.
  2. 세션 이름 지정 : 앞으로 엑셀 작업을 할 때 엑셀파일을 구분하기 위해 세션 이름을 지정한다. 엑셀 작업을 수행할 때 세션 이름을 반드시 넣어야 하므로 잘 기억해야한다. 나는 편의상 "excel1"이라는 이름을 붙여주었다.

중요한 점은 세션을 열었으면 작업이 마무리 된 후 세션 종료를 해주어야 한다는 점이다. 잊지말자!

세션을 만든 후에는 컬럼 이름을 넣어준다. 엑셀에서는 바로 옆 셀로 이동하는 키가 Tab이기 때문에 탈출문자 '\t'을 사용해 셀을 이동해준다. 앞서 설정한 세션 이름을 정확히 넣어줘야 열어놓은 엑셀 파일에 정확히 입력한다.

웹페이지를 여는 액션이 필요한데, "[Object] 프로그램 실행" 액션을 액션 메뉴에서 바로 사용하면 안된다. 필수로 들어가야 하는 값들이 비어있기 때문이다. 따라서 웹에 접속할 때에는 아래와 같은 방법을 쓰자.

상단 메뉴바에서 "액션 레코더 실행" 버튼을 누른다. 그러면 "Recorder is ready"라는 메뉴바가 따로 생긴다. 새로 생긴 메뉴바(이하 "레코드 메뉴")에서 표시한 브라우저 실행을 누른다.

그 후 뜨는 창에서 Window Edge를 선택하고 접속하려는 URL을 넣어준다. AutomateOne은 Edge에 최적화가 되어있기 때문에 Chrome이 아닌 Edge를 사용하도록 하자.

2-3. Loop 돌며 데이터 스크랩핑

미리 지정해둔 구 리스트를 받아 하나하나 구를 돌며 원하는 데이터를 스크랩핑하는 동작을 구현했다.

반복문은 "V.구리스트"를 Array 데이터타입으로 지정하여 강남구, 송파구, 서대문구, 중구, 중랑구를 하나씩 돈다. 이 때 하나의 구는 V.구로 설정했다. 이를 python으로 나타내보면 아래와 같다.

for  V.in V.구리스트:
	pass

반복문에서 최초로 수행할 작업은 데이터를 조회할 구를 콤보박스에서 찾는 것이다. 레코드 메뉴에서 사용자의 동작을 캡쳐링하여 바로 액션으로 변경해준다. 콤보박스에서 특정 구를 선택해야 하는 액션이 필요하므로 단순 클릭이 아니라 "Select" 옵션을 선택해준다. 그 후 옵션값 파라미터에 구 정보를 넣는다. 이러면 해당 반복에 맞는 구 이름을 콤보박스에서 찾아 선택할 수 있게 된다.

원하는 구를 선택한 후에는 데이터프레임을 가져오자. 마찬가지로 레코드 메뉴에서 동작을 캡쳐링하는데, 이번에는 "Table" 옵션을 써보자. 우리가 원하는 데이터가 테이블 형태로 들어가있기 때문이다. 중요한 점은, 테이블 형태이므로 특정 행만 가져오면 안되기 때문에 테이블을 통째로 선택해주어야 한다. 이를 위해 Ctrl + 클릭을 하자. 그러면 아래와 같이 element를 지정할 수 있는 리스트가 나오고, 우리가 원하는 테이블 element를 지정해서 넣어주자. 가져온 테이블 데이터는 V.유가테이블 변수로 저장해둔다.

이제 엑셀에 데이터를 넣기만 하면 되는데, 반복을 돌며 데이터가 있는 행 바로 아래에 넣어야한다. 아래 그림처럼 말이다. 그래야 셀에 있는 값이 덮어씌워지지 않는다.

이를 위해 데이터가 있는 셀의 row가 몇개인지 파악하는 "Row 개수" 액션을 추가한다. 이 액션은 지정된 세션에 접근해서 데이터가 있는 row의 개수를 반환한다. 반환한 수는 RowCount라는 변수로 지정한다.

데이터를 입력할 행 위치는 RowCount + 1인 지점이므로, 이를 계산하여 값을 갖고 있는 변수를 추가하는 액션도 넣어주자. RowCount를 int로 받아 1을 더한다. 1을 더한 값은 V.RowCount라는 이름의 변수로 지정한다.

우리가 가져온 테이블에는 구에 대한 정보가 없다. 따라서 테이블 정보를 넣어주기 전에 구 정보를 따로 넣어줘야 한다. 그래서 "셀 편집" 액션이 필요하고, 설정값은 아래와 같다. 셀 주소 값은 A2, A7, A12, ...이다. 행 위치는 V.RowCount가 들고 있으므로 열 정보인 "A"만 붙여준다.

구 정보를 넣어준 후 긁어온 테이블 정보를 넣어주자. "엑셀에 테이블 변수 값 입력" 액션을 사용했다. 주요한 설정값은 데이터를 넣어줄 컬럼 시작 위치가 2라는 점, 행 위치는 반복을 진행함에 따라 항상 달라지므로 V.RowCount를 지정했다는 점이다. 그리고 처음에 많이 헤맸던 부분이 가져온 데이터는 분명 5개인데 자꾸 4개만 들어가는 것이다. 왜그런지 봤더니 "테이블의 첫번째 열 제외" 옵션이 활성화 되어있어서 그랬다.

매 반복마다 데이터를 저장하는 액션도 추가해주었다.

2-4. Finalizer

마지막으로 모든 작업이 마무리된 후 항상 실행할 명령인 Finalizer를 설정해준다.



3. 시연

아래 유튜브 링크에서 시연 영상을 볼 수 있다.
https://youtu.be/FhwkUnIyAjM

0개의 댓글