반응형
SMALL

메일송수신

메일에 로그인을 해서 확인하지 않아도 메일 내용을 가져올 수 있는 액티비티를 사용해보자.

0. 환경 설정 : pop3/IMAP/SMTP 설정

네이버 메일 들어가자. 내 메일함 옆에 보면 톱니바퀴 모양으로 환경설정이 있다. pop3/IMAP 설정을 클릭한다.

참고) 네이버로는 원래 보안상 되지 않는다. 나중에 회사에서 하는 자동화에 쓰이는 것. 프로젝트에서 화려한 시각화를 위해 사용하면 좋다..

SMTP : 간이 전자 우편 전송 프로토콜, 인터넷에서 이메일을 보내기 위해 사용되는 프로토콜이다.

IMAP : 응용 게층 인터넷 프로토콜, 원격 서버로부터 TCP / IP 연결을 통해 이메일을 가져오는데 사용된다.

 

둘 다 사용함으로 바꾸자. 이걸 어떻게 RPA에 연결해서 자동화를 할 수 있을까?

IMAP로 메일 읽기

1. Get password : 암호화 액티비티

얘는 password가 암호화가 안되기 때문에 암호화부터 한다.

변수 선언해서 password 넣어준다.

password 변수 선언

2.  Get IMAP Mail Messages : 메일 불러오기

Get IMAP Mail Messages 속성에 이메일, 암호, Top3으로 바꾸고 메세지에 변수선언하고 포트와 서버도 넣자.

이거 서버랑 포트에 붙여넣기
속성 적기

 

3. for each 써서 반복문 써서 읽어오기

for each 속성
typeArgument의 형식 선택 : 이걸 자료형으로 한다.

4. 출력 : write Line

본문에 write Line 한 후 subject 해준다.

실행하면 상위 3개 나온다.

SMTP로 메일 보내기

1. Get password : 암호 변수 선언

2. Send SMTP Mail Message : 메시지 보내기

속성이 중요하다.

네이버 설정에서 들어가서 서버와 포트번호를 확인한다.

서버, 포트 확인
속성 채우기

실행하면, 메일이 잘 도착했다.

메일은 프로젝트 앞뒤에 넣어주면 좋다.


데이터 스크래핑(고급) - 네이버 뉴스 최신순으로 첫페이지 스크래핑하기

기사 리스트 뽑기

건강식품 쳐서 데이터 스크래핑을 누른다.

언론사들만 클릭해서 뽑아본다.
열 이름 쓰기
잘 뽑힌다.

다른 데이터까지 뽑기 원할 경우 상호 연결된 데이터 추출을 클릭한다.

이름만 뽑아보자.

뉴스 헤드라인만 선택
테이블 형태로 잘 뽑혔다.

이런식으로 스크래핑해서 엑셀로 내보내거나 할 수 있다.


DB 연결

Ui Path Database Activites 사용하면 된다. -> 다운로드하기

설치하기
이런게 생긴다

ODBC라고, MS에서 만든 데이터베이스에 접근하기 위한 소프트웨어의 표준 규격이다. 프로그램 내에사 ODBC를 사용하면 여러종류의 데이터 베이스에 쉽게 접근할 수 있다.

32g 파일 다운로드 받아서 오라클 클라이언트 설치하기. 64비트 안될 수 있으니 주의! 우리는 이걸로 ㅇODBC Driver를 설치할 것이다.

사용자 정의 > ODBC 설치

폴더에 dbhome_1과 client_1이 있다.

파일 들어가서 D:\app\Kosmo_02\product\11.2.0\dbhome_1\NETWORK\ADMIN 경로에 있는 admin을 복사해서 새로 설치한 client_1에 넣어준다.

이렇게 붙여넣어줌. ( D:\app\Kosmo_02\product\11.2.0\client_1\network)

시작메뉴에 odbc 검색하자.

빈칸에 넣어야하는데 확인은 admin에서 tnsnames에서 확인한다.

orcl 맞을껄?
test Connection 해보자.
잘 연결되었단다.
잘 등록되었다.

이름 잘 기억해두도록하자.

이제 Ui Path로 이동한다.

1. Connect

Connect 하고 아까 설치한 ODBC를 찾아서 클릭한다.

데이터 소스 설정하기
오라클 계정 로그인

확인하고 속성에 변수 정의하기.

결과값 받을 변수 정의

앞으로 Connection 이라는 변수에 오라클 DT가 들어올 것이다. 이거는 연결하는 통로인 것. DT 형태로 오지는 않는다.

2. execute Query

execute Query 써서 데이터베이스 select문 써주기


  
"select * from Board"

DT로 데이터테이블도 정의해줌. 그래야 Connection으로 들어온 변수가 DT 형태로 들어온다.

execute Query 속성 설정

2. Disconnect

커넥션을 끊어준다.

속성에 Connection 연결해준다.

3. Output Data Table

csv 형식으로 문자열에 DT를 쓴다. 즉, DT를 받아온 것을 Str로 바꿔오는 것. 그래야 출력이 되니까.

변수도 꼭 정의해주자.

4. Write Line

str로 받아온 값들을 출력해준다. 그럼 오라클에 있는 board 테이블의 데이터가 String 형태로 출력창에 출력된다.

전체 연결 흐름
전체 연결 흐름 출력값

 

반응형
LIST
반응형
SMALL

RPA로 디렉토리 관리하기

디렉토리 관리도 가능하다. 흔히 폴더를 생성하고, 지우고, 파일을 이동시키고, 복사하는 등의 기능을 디렉토리 관리라고 부른다.

1. 폴더 만들기 : Create Folder

지정된 위치에 폴더를 만든다.

폴더 생성

2. 파일 / 폴더 삭제 : Delete

파일 또는 폴더를 삭제한다. 위치는 속성에 Path에 지정한다.

3. 파일 복사 : Copy File

파일을 복사한다. 위치의 시작지점(원래 있는 곳)과 종료지점(복사할 곳)을 설정한다. 이름은 바꾸고 내용은 그대로 복사할 수도 있다.

4. 경로 확인 : Path Exists

지정된 경로가 있는지 확인한다. 주로 파일 또는 폴더가 있는지 확인할 때 쓴다. boolean 값으로 출력된다.

파일이 있으면 메시지 박스를 띄워보자
파일이 있다.


디렉토리(파일, 폴더) 액티비티

1. Copy File : 다른 경로로 파일 복사

2. Create File : 파일 생성

3. Create Floder : 폴더 생성

4. Delete : 파일/폴더 삭제

5. Move File : 파일 이동

6. Compress/Zip Files : 파일/폴더 압축

7, Extract/Unzip Files : 파일/폴더 압축 해제

8. Path Exists : 해당 경로에 파일/폴더가 있는지 검사 -> if(조건문)과 같이 쓴다.(Boolean)

9. DeirectoryInfo.GetFiles : 특정 폴더에 있는 모든 파일 읽기 


스니펫

기본적으로 여러 샘플 workflow 와 Snippets이 포함되어 자동화에서 사용할 수 있다.

5. 그 폴더에는 뭐가 있을까? For Each File in Folder

선택한 경로에 있는 파일들의 경로를 출력해준다.

for each File in Folder 스니펫
실행하면
경로 선택
바탕화면에 있는 파일들의 경로가 출력되었다.

SelectFolder를 원하는 경로로 바꾸면 경로를 선택하지 않아도 자동으로 출력해준다.

경로 자동화

 

셀렉트박스(select)와 셀렉터(Selector)

여기 셀렉트박스가 있다. RPA에서 셀렉트박스를 자동화를 하려면, 셀렉트박스를 한번 클릭하고, 원하는 항목을 또한번 클릭해야 한다. 이걸 자동화를 하려면 어떻게 해야할까?

두번 클릭해야할까?

셀렉터(Selector)는 Ui에 대한 속성값을 뽑는다. XML 코드이며 각각에 대한 tag를 가지고 있다. 
이 태그들 중 특정 부분을 변수처리를 해서 반복문 안에 넣어서 한줄씩 선택하는 방법을 쓸 수 있다.

1. 변수처리 : Assign

5월, 6월, 7월만 선택하는 것으로 하자. 배열에 넣어준다.

변수처리

2. 반복문 : For Each

반복문을 이용해서 클릭 기능을 부여해준다. 우리는 Selector의 태그를 바꿔줄 것이기 때문에 태그를 잘 맞춰서 클릭해주자.

반복문

3. 셀렉터(Selector) 속성 변경: Target - Selector 변경

셀렉터를 확인해보자.

이 값들을 변화시켜줄꺼다.

우리는 For Each 문에서 우리가 보고싶은 월을 담은 배열, Ary_Month를 'month'라는 변수에 담아 반복문 안에 넣었다. 그 month로 값이 변화한다면 우리가 원하던 것처럼 자동으로 바뀌지 않을까?

month로 바꾸기

단, 변수를 {{ }} 안에 담아서 선언한다.

Selector 속성에 들어가서 String 타입들의 태그를 고칠 수 있다. aaname의 경우 String 이므로, ' " +month+ " ' 처럼 형식을 바꿔서 사용할 수도 있다.

 

자동으로 잘 된다.

 

데이터테이블 액티비티 정리

1. Add Data Coulmn : 칼럼 추가 (중간에 추가는 안된다. 뒤쪽에 추가하는 것.)

-> 추가할 때 ColumnName에 칼럼명을 적으면 된다.

2. Clear Data Table : 데이터 테이블 초기화(칼럼명은 남겨두고 데이터만 초기화한다)

3. Generate Data Table (String -> DataTable로 변환)

4. output Data Table (DataTable -> String로 변환)

5. Merge Data Table (밑으로 데이터 테이블 누적)

-> 옆으로 쌓는 것은 없다. 옆으로 쌓는 것은 칼럼을 추가해서 넣는 것 뿐

6. join Data Table (스키마에 따라 병합 : 오른쪽, 왼쪽, 안)

-> SQL의 join 참고

7. Sort Data Table (데이터테이블 정렬 : 오름차순(ASC), 내림차순(DESC))

반응형
LIST
반응형
SMALL

RPA 프로젝트

RPA는 기본적으로 사무자동화를 한다. 사무의 프로세스는 여러 단계로 이루어져 있다.

STEP1. 과제 발굴

여기서 과제란, 재무, 인사, 구매, 경영지원, 수입, R&A 등 it 업무와 약간 거리가 있는 경영업무에 관련한다. 문제가 발생하고 이를 해결하기 위한 과제를 생성한다.

STEP2. 분석/설계

1) 환경테스트

RPA 과제에 적합한지 확인하는 작업이 꼭 필요하다.

시스템 종류 확인 : ERP, 그룹웨어, 브라우저, FTP 등등

시스템과의 호환성 확인 : 엘리먼트 동작여부(예를들어 text 추출 시 text만이 아닌 크게 잡힌다던지)

-> 특히 엘리먼트 동장의 경우 문서보안(DRM)이 걸려있거나, 시스템 접근 권한이 걸려있어 캡쳐 불가 또는 접근 불가가 되는 경우가 있다. 이러한 경우 보안을 풀어달라고 하거나 권한이 허용이 되어야한다.

설치 / RAM(하드웨어) / OS 버전 확인 : 특히 OS의 경우, 윈도우만 가능하며, Window7은 최근 서비스를 종료하였다.

2) 설계 기본 고려사항

- 안정성 : 에러 처리하기(기본적으로 Delay 삽입, Try-catch 등을 이용한 예외처리까지)

- 효율성 : 중복개발이 없게. 로직의 효율성을 올려야 한다.(ctrl + c , v)

- 유지보수성 : 예쁘게, 깔끔하게, 잘 나눠서(★★★), 이름 약어 쓰지 말고 알아볼 수 있게, 주석 잘 나눠서

- 확장성 : 낭비 없이 효율적으로 돌려쓸 수 있음. 다른 프로세스에서 복사, 붙여넣기 할 때 간편히 파일만 옮길 수 있다.

STEP3. 개발

단계별로 프로세스를 개발한다

STEP4. 운영

프로세스의 운영/관리. 오케스트레이터로 로봇과 프로세스를 관리한다.

 

절차지향과 객체지향

C 언어 Java,Python,C#(vb.net)...
절차지향식 언어 객체지향식 언어(OOP: Object Oriented Programing )
우리가 한 것처럼 절차별로(시퀀스별로) 잘 나눠서 흐름대로 설계 프로세스 기능별, 목적별로 사용. 메모리와 관련이 깊다. 프로세스 목적에 따라 파일 단위로(FlowChart별로) 나눠서 설계한다. -> Invoke WorkFlow
해석이 쉽다. 유지보수가 쉽다. 
로그인 기능이 시퀀스별로 있으면 갯수만큼 수정해야 한다. 로그인 기능이 담긴 파일 하나만 수정하면 된다.

예) RAM의 경우, 8GB라고 했을 때, 4GB는 시스템, 2GB는 타 시스템, 고작 Ui Path가 쓸 수 있는 메모리는 1GB + 예비용 1GB 밖에 되지 않는다. 따라서 파일의 개념이 더더욱 필요하다. 객체지향 방식의 경우 낭비가 적고 확장성이 높아 속도도 빨라지고 효율이 좋다.

인수 (사용방법)

인수(Arguement) vs 변수(Variables) : 둘다 데이터를 담고 있으나, 파일 간 공유와 파일 내 공유가 다르다.

in(입력) : 데이터 받을 때 : in_[변수명 규칙]

out(출력) : 데이터 내보낼 때 : out_[변수명 규칙]

inout(입출력) : 왔다 갔다 할 때 : inout_[변수명 규칙]


예제1. 파일로 데이터 주고받기 연습해보기

객체지향방식 Flow -> 새로운 Main.xaml이 여러개가 생긴다는 뜻.

 

1. InputData.xaml / OutputData.xaml 만들기

새로운  시퀀스를 추가한다.

2. Main 에서 변수선언

간단하게 Str_Number 라는 변수를 만들어준다.

3. Main에 InputData.xaml 연결하기

지금까지 액티비티는 드래그 앤 드롭으로 끌고왔었다. xaml도 마찬가지이다. 액티비티와 같이 끌어다가 추가해보자.

Invoke workflow가 생긴다. 


[ Invoke workflow ]

Invoke는 호출한다는 뜻으로, 다른 위치에 저장된 프로세스를 현재 프로세스 위치로 불러온다는 뜻이다.

확장성 개념에 해당되며 복잡한 프로세스를 작은 단위로 나눌 때 사용된다.

실제로 모든 프로젝트는 Invoke workflow 기반으로 이루어진다. (동일 프로세스 호출)

 


4. 인수 생성

현재 InputData로 연결이 되었다. 그리로 이동해보자. 위의 그림에서 [워크플로우 열기]를 누르면 이동된다.

인수 생성 및 Message Box 만들기

간단하게 Message Box를 만들어서 인수를 만들어주자.

인수는 외부로 보낼 수 있는 데이터다. 변수 이름은 위에서 설명했던 대로 in을 붙이고 변수명처럼 뒤에 붙여준다.

우리는 아까 연결해놓은 Main에서 이 인수의 값을 입력받을 것이다.

5. Main에서 인수 가져오기

 

인수 가져오기 클릭

저장 후 Main에서 인수를 받아오자.

값에 변수 입력해주기

아까 값에 우리가 입력받을(in) 할 변수 이름을 써준다.

앞서서 Main에 생성했던 Str_Number 값이 인수 안에 들어가고, 그것을 메시지박스에 출력할 것이다.

6. Output.xaml 동일 적용

출력도 동일한 방식으로 진행해준다.

단, 인수에 값을 담아 그 인수값을 출력해줄 것이기 때문에 선언을 여기에 해준다.

인수 생성 및 값 입력
값 입력
main에 message box를 생성한다.

전체 main 컨트롤러 모습은 이렇다.

7. 실행

실행하면 두개의 메시지박스가 실행된다.

main에서 생성한 메시지 입력 후 출력
출력xaml에서 생성한 인수값을 main에서 출력

 

 

예제2. 객체지향방식으로 로그인하기

사무자동화 과정에서 수많은 사이트와 그 사이트를 로그인하는 상황이 생긴다.

지금까지 절차지향으로 만들었을 때에는 흐름에 따라 브라우저를 열고, 클릭을 해서, ID와 비밀번호를 입력하고 로그인했지만, 객체지향에서는 사이트와 ID, pwd까지 바뀔 수 있는 변수에 불과하다. 

객체지향방식에서는 이러한 변수들의 변화와 기능들을 분리한다. 우리가 계속해서 시퀀스를 생성했던 Main.xaml이 spring 프로젝트의 Controller가 된다고 생각하면 쉽다.


[ Main.xaml과 객체지향 ]

1. 데이터 관리(선언, 초기화) - Main에서 정리한 것을 config.xlsx 파일에 저장한다.(한 곳에 모으기 위함)

2. 프로세스를 기능별, 목적별로 파일 단위로 생성해서 Main.xaml로 리모컨처럼 관리한다.

3. 반복문을 어느 파일 안이 아닌, Main.xaml 안에서 파생xaml들을 반복시킨다.

4. Invoke workflow를 생성할 때에는 시퀀스 안에 생성한다.


1. 파일(절차) 분리하기 : 변수선언 기능 / 로그인 기능

브라우저는 주소만 바꾸면 계속해서 사용할 수 있는 기능이다. 모든 사이트를 열 수 있는 공통 모듈을 만들자.

변수선언에서 바꾸면 사이트 진입은 자동으로 될 수 있도록 분리시킬 것이다.

시퀀스를 나눠서 이어준다.

2. 변수 선언하기 : Assign

Assign으로 담아서 필요 시 이 부분만 수정할 수 있게 하자.

3. 기능별 xaml 만들기 : 브라우저열기, ID 입력하기

변수선언

기능은 쪼개 놓을수록 유지보수가 쉽다. 한 곳에 할 수도 있지만, 열리는 브라우저 주소가 달라질 수 있으므로 다르게 설정하였다.

xaml 생성

4. OpenBrowser.xaml 기능 구현 : 브라우저 접속 프로세스

예제1에서 했던 것 처럼, 우리는 Main이 아닌 여기, 이곳에서 기능(브라우저열기)을 구현해야하고, 그 변수는 Main에 있다. 우리는 그 데이터를 인수에 담기 위해 "입력을 받아야한다".

인수 설정 : 입력

나머지는 원래 했던 것처럼 Open Browser - [ Maximize window - Delay ] 를 해준다.

예제1번에서처럼 인수를 Main과 연결해주어야 한다.

5. Main.xaml - '사이트진입' 시퀀스에 Invoke workflow 설정

OpenBrowser.xaml을 끌고와서 인수를 가져오자.

인수 가져오기

우리가 입력받을 데이터는 Str_URL 이다.

값 입력

6. ACMESiteLogin.xaml 기능 구현 : ID 입력 프로세스

정확히는 email이긴하지만 아무튼 Attach Browser - [ Type into ] 를 이용해서 자동 입력하게 해준다.

동일한 방식으로 인수를 선언해서 ID 값을 "입력을 받아야한다".

로그인 기능 구현

7. Main.xaml - '사이트진입' 시퀀스에 Invoke workflow 설정

ACMESiteLogin.xaml을 끌고와서 인수를 가져오자.

인수 가져오기
받아올 값 입력

7. 실행

잘 구현되었다.

 

반응형
LIST
반응형
SMALL

기능별

# 기능 시퀀스
#팝업메시지 #알림창 Message box
#변수 선언(설정) 속성-value에서 Shift + K / Assign
#출력창에 출력 Write Line //숫자 or 불린형은 ToString 붙여야함
#로그인 자동화 Attach Browser - [ Type Into - 창선택 - id입력 ] -> [ Get Password : 속성>변수선언, 암호입력 ] -> [ Type Into - 변수입력 ] -> [ Click - 버튼 ]
#브라우저 열기 (Assign 변수선언) - Open Browser - [ Maximize Window - Delay ]
#카테고리 클릭 Attach Browser - [ Click ] - Delay
#선택박스 고르기 Click(선택박스) - Select item - 원하는 것 선택
#텍스트 입력 Type Into - [ 변수선언  value 값 입력 ] - Click
//속성에서 커서클릭 + 칸비우기 True 설정
#텍스트 가져오기
#하나의 데이터 가져오기
Get Text //속성에서 변수에 담는 것이 좋음
#데이터 스크래핑(1페이지) 리본메뉴 - 데이터 스크래핑 - 테이블 컬럼클릭 - 전체 선택 //변수에 담기
#엑셀로 저장 시퀀스생성 - excel application Scope - 경로 설정 - [ Write range (저장 범위 설정)]
#브라우저 이동 Navigate To //주소입력
#탭닫기 Close Tab
//한 attach browser 안에서 이동과 닫기를 같이할 수 없다.
#형변환 CDBL(변수명) //text로 받은 변수를 숫자로 변경
#파일 원하는 위치에 저장 파일 이름에 전체 경로\파일이름 으로 쓰기
#배열에 값 넣기 1) 크기선언 안하고 바로 넣기 :
Assign 변수명 = {"A","B","C"}
2) 크기 선언 하고 따로 넣기 :
Assign 변수명 = new String(100){}
값 넣기 :
변수명(0) = "값"
#반복문 For Each - [ 변수명 item에 담고 - 본문 내용 반복 ]
#기능 메소드
#특정 파일명 검색
#특정 문자가 있는지 검색
#특정 제목에 특정 키워드가 있는지 검색
.Contains("검색단어")
#시작점에 특정문자가 있는지 검색하고 싶을 때 .StartsWith("검색단어")
#끝에 부분 문자 검색 //확장자명 일치 여부 판단시 사용 .EndsWith("검색단어")
#변수 중 일부 글자 대체 //데이터 가공시 사용 .Replace("기존","바꿀거")
#글자 일부 추출(인덱스번호 시작, 끝) .Substring(시작인덱스) / .Substring(시작인덱스,문자길이)
#양쪽 공백 제거 //데이터의 정합성 판단 .Trim //엑셀에서 .ToString.Trim 많이 사용
#특정 문자를 기준으로 나누기
//나눈후 배열에 담긴다
//데이터를 빨리 찾기 위해 사용
데이터명.Split("나눌기준".ToCharArray)
(참고) Split 기준 문자 정리(괄호 : 자바표현) 1)Space(\s) :.Split(" ".ToCharArray)
2)Enter(\n) :.Split(Environment.NewLine.ToCharArray)
3)한글자씩 :.Split("".ToCharArray)
#특정 문자를 전부 대문자/소문자로 변경 데이터명.ToUpper()
데이터명.ToLower()

Object Reference not~~~  / 개체참조가 설정되지 않았습니다~

이러한 에러들은 "변수 빼먹었다"는 소리이다.

반응형
LIST
반응형
SMALL

+ Recent posts

반응형
LIST