IFRAME형태로 Wrapping되어 있어서

UI가 새롭게 뜰 때마다 Number가 달라지거나 Frame 내부 id값이 달라지는 등의 케이스가 많다.

특히 사내 시스템의 경우는 이렇게 개발된 경우가 많은데

이런 시스템에서는 iframe 관련 셀렉터가 자꾸 바뀌기 때문에 그 부분을 *처리 하거나

혹은 특정 특성만 지우면 인식이 안 된다.

 

오히려 거꾸로 iframe 관련 특성을 다 지워버리자.

이외 남은 것들만 남기면 "UiElement가 더 이상 유효하지 않습니다.(UiElement isn't valid anymore)"가 뜬다.

메세지와 달리 정작 유효성 검사는 초록색으로 뜨고 이상하게 잘 잡힌다.

처음엔 우연인줄 알았는데 매번 쓸 때마다 답답해서 혹시 되나하고 보면 잘 된다.

[물론 남은 셀렉터가 해당 화면에서 그 UI를 대표할 수 있을지는 판단을 하긴 해야 한다.]

일종의 버그느낌이지만 iframe 개발이 잦은 상황에서는 굉장히 유용하다.

# Ui framework는 Default로 둔다.

(혹시 안 되는 케이스가 있다면 댓글로 제보 부탁)

주의점

URL에 띄어쓰기가 있는 경우 크롬에서는 새로운 파라미터로 인식하게 되어 탭을 새로 띄우는 식으로 동작할 수 있다. URL을 미리 urlencode하여 보내거나 최소 띄어쓰기를 "+"나 "%20"으로는 replace 해줘야 좋다.

Uipath 기준으로는 Uri.EscapeUriString(vURL)

-----------------------------------------------------------------------------------------------------------------------------------------------------------

보통 웹을 오픈할 때는 Open Browser에 해당하는 패키지들이 있다.

이슈는 셀레늄 같은 걸 이용하는 RPA툴에서 일어난다.

이미 하나의 브라우저 세션을 점유하고 있는 상태에서 새로운 브라우저를 띄우려고 할 때,

세션을 새롭게 잡아야 되는 케이스가 많다.

그래서 open browser로 열고 그 주소창에 Type into나 Set Text를 하는 경우가 있는데

그냥 "브라우저 실행 경로(.exe까지)" "웹사이트 주소" 형태로 주소를 한 칸 띄어쓰기로 파라미터를 주면 된다.

[Uipath는 셀레니움으로 작동하지 않기 때문에 이런 경우가 거의 없을 거고 아마 Brity RPA 같은 툴들이 그렇다.]

 

 

현상

Chrome Web UI를 누르는 작업에서 해당 오류 발생.

2개의 서로 다른 계정의 같은 작업 중 2번째에서만 저 에러가 나고 진행되지 못 함.

기존 같은 작업 중 해당 에러가 난 적은 없음.(간헐적인 에러)

 

추정 원

간헐적인 Uipath의 Chrome Extension과 Executor(UiRobot.exe)간 충돌

 

조치

추가로 발생하는지 모니터링

RPA는 Github보단 SVN을 많이 쓰는 경우가 많다.

과제 소스를 협업하여 작성하기 보다는 보통 각 개발자 1명이 그 프로세스를 담당하여 처리하기 때문이다.

GIT은 한 소스에 대해 복잡하게 협업하는 경우 각 Branch에서 Push하고 관리자에게 pull reuqest를 하면,

해당 소스의 이상유무를 확인하고 main Branch에 Merge하는 식으로

소스 협업을 유기적으로 관리할 수 있다는 장점이 있지만 그만큼 더 복잡해진다.

그래도 회사에 Github Organization이 있고 Private으로 써도 된다라면 Github를 써보자.

Branch를 하나만 두고 Private으로 하면 SVN이랑 다를 게 없다.

1. Github에 Repository를 만들어 준다.

Github에 로그인 해서 Create a new repository를 눌러 이름을 정하고 만들어주자.

이러면 온라인 저장소는 만들었다.

2. 만들어진 프로젝트에서 Home-Team 메뉴로 가면 GIT INIT 메뉴가 있다.

이 INIT을 누르면 폴더를 선택하라고 뜬다. 프로젝트 폴더를 선택해준다.

Git init했을 때 뜨는 Commit 팝업

3. Commit Message를 적고 Commit And Push를 하면 Repository 주소를 적으라고 나온다.

Git Remote 연결

URL에 git을 만들었을 때 나온 주소(.git으로 끝나는 주소)를 넣고 Add 후 Save하면 에러가 난다.

Uipath Studio 권한이 없어 생긴 에러

GitHub에서 허가되지 않은 App에 Repository 권한을 줄 수 없다는 말이다.

open configuration page를 가서 허용해주자.

App을 Install 할 거냐고 묻는 Configuration page

 

4. Authentication 확인 클릭

이러면 연결이 완료되었다.

 

이제 새로운 파일이 추가되면 +가 뜨고 수정이 되면 해당 파일에 노란 표식이 뜨게 된다.

Studio 우측 하단에 설정된 Branch와 연결된 Repository가 뜬다.

Branch를 추가하고 싶다면 Manage Branches를 켜면 된다.

DRM은 관리 방식이 다양하지만 크게는 2가지 경우가 많다.

1) 문서를 암호화된 확장자로 바꾸어 내부에서만 볼 수 있게 함

2) 문서에 암호화된 문구를 삽입함[저장하는 순간 DRM 걸림]

 

1)의 경우엔 확장자를 Convert 해주어야 하는데 방법이 2가지다.

(1) “C:\Program Files (x86)\Microsoft Office\Office15\excelcnv.exe” -oice “C:\temp\Test.enc” "C:\Temp\Test.xlsx” 형태로 Command를 입력[Start Process를 이용해 앞단은 프로그램 경로에 -oice부터는 파라미터에 입력]

(2) 파일을 Start Process로 열고 파일 - 다른 이름으로 저장 - 경로 및 파일이름 지정 - 저장

 

=> (1)의 방법이 깔끔하지만 보안사항에 따라 안 될 가능성이 있다. 그럴 땐 어쩔 수 없이 (2)로 가야 한다.

 

2)의 경우엔 System-File에서 사용하는 NPOI로 읽는 방식이 차단된다.

Text 파일도 다른 문구가 추가되어 읽힌다. [Read Text File 사용 제약]

따라서 최대한 Excel Scope을 사용하거나 Text의 경우 메모장이 아닌 다른 편집기를 이용해 편집하고 저장해야 한다.

이 경우엔 Convert를 Back단으로 해주면 파일이 깨진다.

 

 

위의 모든 방법으로도 접근이 안 되면

DRM을 푸는 방법 또는 읽는 방법을 따로 문의해 모듈을 만들어 활용하자.

 

https://stackoverflow.com/questions/61531782/how-to-block-chromium-edge-from-using-ie-mode-on-single-page

 

How To Block Chromium Edge from using IE Mode on single page

I do not have access to change company policy that has enabled IE mode for intranet sites. On on page used by our team, IE cannot be used. Using Edge in IE mode, the page does not work. There is...

stackoverflow.com

※ 기본적으로 엣지 설정에서 IE모드 Enable을 할 수 없는 상태일 때의 팁임  

 

정리하자면,

1. edge://flags 에서 Enable IE Integration을 찾아 Enable

[특정 버전 이상이면 아예 없어진 듯하다. 그냥 설정에서 되게 해놨으니까 없앤 것으로 보임.[각주:1]]

2. 실행경로 뒤에 --ie-mode-test 라는 파라미터를 주어 실행

"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --ie-mode-test

 

 

++

RPA에서 IE 모드로 바꿔서 기존 소스를 마이그레이션 하려는 분들이 있는데

애초에 서비스 제공자들이 아예 IE를 지원 안 한다는 추세가 심해서 웬만하면 크롬으로 바꿔주자

회사 내부 legacy들 중에 IE로만 되는 것들은 어쩔 수 없지만 ㅠ

  1. flags는 ,크롬도 마찬가지지만, 실험실 컨셉이기 때문에 중간에 사라질 수도 있다. [본문으로]

RPA를 하다보니 확장성 관련 외부 API를 많이 끌어와 쓰게 된다.

가령 Google Cloud Platform, MS AZURE 같은 AI 관련 기능, 웹툴 관련 기능도 있고

slack 같은 데스크톱앱 같은 것도 간단하게 앱을 만들고 OAuth 관련 기능만 활용하면 된다. [챗봇이나 noti 관련]

 

이런 것들을 활용하면서 OAuth가 무엇인가 궁금해져서 정리해 본다.

1. 나오게 된 이유

OAuth는 Open Authentication의 약어로 인증방식의 통합된 표준이라 볼 수 있다.

기존엔 아이디, 비밀번호 같은 걸 활용했으나 해당 정보는 상대적으로 보안이 취약한 구조였기 때문에

각 앱들이 API 서비스 등을 제공할 때 각각 인증하는 방식을 사용했었다.

그런 인증방식을 통합함으로써 여러 앱간 통합 인증도 가능하게 되었다.

(이래서 소셜 계정으로 로그인이 된다.)

+ 기존 방식에서는 서비스 사용 권한을 부여하기 위해서 그룹을 만들고 그 그룹내 각 아이디에 권한을 부여하거나

권한 그룹을 만들어 거기에 그 아이디를 소속시키는 형태였다.

그 권한이 부여된 아이디/패스워드를 뿌린다? 그럼 그냥 그 계정이 털리는 거다.

계정에 대한 컨트롤과 계정이 사용할 수 있는 서비스에 대한 컨트롤이 구분하기 어렵고 폐쇄적인 편이었다.

근데 OAuth는 그냥 열려있는 상태로 토큰만 갖고 있으면 해당 토큰에 부여된 서비스 요청을 할 수 있게 해놨다.

이런 자유도는 토큰을 통해 쉽고 빠르게 앱 생태계, 서비스를 확장시키도록 해주지 않았나 싶다.

 

"나 이런 서비스 만들고 싶은데 그럼 다른 곳에서 서비스하는 거 빌려와서 이리저리 활용해 봐야지"

=> IaaS, PaaS를 손쉽게 구매하고 내 앱 만들 확장성을 바로 구성

 

 

2. 인증 방식

기존 ID/PW를 쓰던 방식이 쿠키, 세션을 이용하는 것과는 달리 OAuth는 토큰을 이용한다.

콘솔계정의 사용자(개발자)는 앱[각주:1]이라는 개념을 만든다.

그러고 앱에 사용할 수 있는 관련 권한을 설정하고 토큰을 발행한다. [각주:2]

발행 시 토큰이 가질 수 있는 권한을 부여한다.

이후 OAuth 토큰을 요청하면 부여된 권한에 맞는 요청에 대해 API 기능[각주:3]을 하게 된다.

 

요컨대,

1. 앱 생성

2. 권한이 부여된 토큰 생성

3. 해당 토큰으로 요청하여 Access하고 API 기능 요청

하는 형태이다.

 

그래서 OAuth인증을 하라고 하면,

'일단 앱만들고 앱에 대한 토큰은 어디서 발행하는지 권한은 어떻게 되는지 볼까?' 로 접근하면 된다.

  1. 여기서 앱이라는 개념이 넓어지는데 단순히 우리가 사용하는 앱이 아니라 서비스를 사용하는 Back단의 주체까지 앱이라고 부른다. 어떤 면에선 권한을 부여하기 위한 개념적인 존재에 가깝다. [본문으로]
  2. 토큰 발행말고 Access Account를 따로 발급한다든가, API Key를 이용한다든가 할 수도 있다. 여기선 OAuth를 설명 [본문으로]
  3. 여기서 기능이라고 표현한 것은 단순히 정보 조회뿐 아니라 구글시트 쓰기, 드라이브 파일 삭제 등 API로 제공되는 것들을 모두 할 수 있기 때문 [본문으로]

RPA를 운영할 때, 포탈같은 개념이 있으면 나쁘진 않은데

도입한 곳도 없고 그 기능에 비해 너무 비싸다.

(사실 대부분의 기능이 그냥 Swagger를 옮겨온 식이고 그나마 화면 모니터링이 있는데

그거 하나 쓰자고 포탈을 구입하는 건....)

따라서 모니터링 및 문제상황에 대한 녹화 기능 등이 대부분 필요하다.

그 경우 쓸만한 툴을 소개해 보고자 한다.

 

1. VNC 프로그램

VNC는 가상 네트워크 컴퓨팅으로 쉽게 말해, 원격 접속 및 컨트롤을 할 수 있는 기술이다.

RDP와는 다르게 여러 세션에서 같은 서버에 붙을 수 있다.

각 프로젝트 사이트에서 VNC를 사용한다면 각 Device마다 VNC 서버를 설치해놓으면 된다.

그럼 VNC Viewer를 통해 모든 Device를 한번에 모니터링할 수 있고,

모니터링을 하다 문제가 생기면 개입할 수 있다.

특히나 좋은 것은 RDP 세션의 경우 일단 붙어서 모니터링 하려고 하면 User의 input이 의도치 않게 들어가고

RDP 세션을 종료하면 로그오프가 되는데 VNC는 그런 것들을 사전에 차단하고 모니터링할 수 있다.

필자의 경우 프로젝트에서 RDP는 아예 금지한다.

(그렇지 않으면 RDP로 모니터링하고 나왔다가 그 디바이스 계속 잠겨있어서,

다음날 새벽 스케쥴 혹은 주말스케쥴 다 날려먹는 최악의 사례가 심심찮게 나온다.)

오픈 소스 프로그램으로는 UltraVNC가 있고 나머지 tightVNC, tigerVNC, RealVNC, NQVM 등등 많은데

문제가 없으려면 Ultra로 쓰는 걸 추천. (딱 하나 불편한 거는 input 허용 요청이 토글로 바로 안 됨 ㅠ)

세팅은 RPA용으로는 초기 세팅에서 조금 만져야 하니 차근차근 옵션을 체크해보길 바란다.

** 2022-07-12 보안에 따라 서버를 관리자 권한으로 실행해야만 되는 케이스가 있다. 관리자 권한으로 실행 후 install service - start service 해보고 Viewer로 붙어보자.

UltraVNC Server Setting1

 

UltraVNC Server Setting2
UltraVNC Viewer Setting

 

2. 녹화 프로그램

디버깅이 잘 되게끔 소스를 짰다면, 녹화영상은 대부분 과제의 산출물로서 제작하게 된다.

간간히 영상 디버깅이 필요한 과제의 경우엔 과제 시작 시 녹화,

과제 끝나고 녹화 종료 하는 형태로 모듈을 하나 심어놓고 실행하게끔 하자.

(간단하게는 녹화 시작, 녹화 종료에 해당하는 hotkey를 누르는 것으로도 된다.)

보통 Ocam을 너무 좋아하는데 Ocam은 광고도 많고 창에 Attach 할 수도 없어서 녹화중엔 다른 짓을 못 한다.

따라서 ShareX나 OBS 같은 걸 깔아서 창, 프로그램에 Attach해서 녹화하는 걸 추천한다.

 

 

 

+ Recent posts