https://forum.uipath.com/t/uipath-chrome-manifest-v3-extension-released-with-2022-4-update/422572

 

UiPath Chrome Manifest V3 Extension Released with 2022.4 Update

UiPath Chrome Manifest V3 Extension Released with 22.4 Update Context The adoption of Manifest V3 represents one of the biggest shifts in the Google Chrome extensions platform since it launched a decade ago. Extensions using Manifest V3 will enjoy enhancem

forum.uipath.com

 

핵심을 요약하자면,

1. Chrome Manifest V3가 강제 적용되고 V2는 2023년 1월에 완전 종료된다.

2. V3가 적용되고 Studio 및 Robot이 업데이트 되면 특정 element에 simulate click이 더 이상 동작하지 않게 된다.

(특정 element란 하기에서 설명하는 Javascript 포맷으로 핸들링하는 곳이다. 거의 대부분 체크를 해봐야 된다고 본다.[당시에는 예시를 보고 되게 쫄았는데 정말 예시 수준으로 javascript: 포맷일 때나 안 된다])

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

Studio and Robot upgrades to 22.4 or newer versions, causes Simulate Click on certain/some webpage buttons that have handlers in “javascript: ” format to no longer work.

Example of a button with a “javascript:” handler

<form action="javascript: window.location.href='FormHandler.html';" method="get" novalidate="true">

Root cause

This is a technical limitation introduced by Google’s rollout of the Manifest V3 update to their Chrome extension platform.

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

어쨌든 내년까지는 무조건 해결돼야 하는 문제다.

지금 브라우저 열심히 크롬으로 전환하고 있는데, 관련 Simulate click들은 웬만하면 Default 클릭으로 바꿔야 겠다.

 

** 기존에 simulate click은 Default Click(hardware click)과는 달리 요소 레이어가 뒤쪽에 숨어있어도

Back단으로 클릭하기 때문에 소위 말하는 '헛손질'이 매우 적었다.

그런 장점때문에 select Item으로 선택되지 않는 것들을 Back단으로 클릭해 선택하거나,

모달팝업 광고에 가려진 버튼을 이슈없이 누르고 진행하는 등 쓸줄 아는 사람 입장에서는

프로젝트 수행의 안정성을 높이기 위해 필수로 클릭하고 가는 옵션이었다.

 

Input 데이터들을 받다보면, 주소를 매핑해야 되는 케이스가 생기는데

주소는 input이 일정하지 않은 편이다.

서울시 강남구 홍길동7로 3-1 식으로 도로명으로 쓰거나

그냥 서울을 빼고 강남구 홍길동7로 이렇게 써있을 때도 있고

지번주소로 적힐 때도 있다.

특히 영어로 적히게 되면 순서까지 바뀌게 된다.

 

그래서 차라리 검색 API로 keyword를 보내고 거기서 return되는 값으로 일원화 하는 게 편하다.

https://www.juso.go.kr/addrlink/addrEngApi.do?confmKey={승인키}&currentPage=1&countPerPage=10&keyword=

나같은 경우는 외국의 호텔 정보와 비교해야 되는 케이스가 있어서

마스터의 한글 주소가 있으면 영어로 변환하여 사용했다.

 

 

API 정보 링크

https://www.juso.go.kr/addrlink/devAddrLinkRequestGuide.do?menu=roadApi 

 

오류 | 도로명주소 안내시스템

고객님께서 요청하신 페이지의 주소가 잘못 입력되었거나, 페이지의 주소가 변경 혹은 삭제되어 요청하신 페이지를 찾을 수 없습니다. 입력하신 주소가 정확한지 다시 한번 확인해 주시기 바랍

www.juso.go.kr

 

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

세계주소를 체크하고 싶다면 Google Map API를 써보자[2022-06-14 기준 1000건당 17달러가 과금됨. 너무 비싸다 ㅠ]

https://maps.googleapis.com/maps/api/place/findplacefromtext/json
  ?fields=formatted_address%2Cname%2Crating%2Copening_hours%2Cgeometry
  &input={KEYWORD}
  &inputtype=textquery
  &key={API_KEY}

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

결과 SAMPLE

{
   "candidates" : [
      {
         "formatted_address" : "대한민국 서울특별시 중구 청계천로 100 시그니쳐타워 서관 9층",
         "geometry" : {
            "location" : {
               "lat" : 37.5674863,
               "lng" : 126.9884026
            },
            "viewport" : {
               "northeast" : {
                  "lat" : 37.56883612989273,
                  "lng" : 126.9897524298927
               },
               "southwest" : {
                  "lat" : 37.56613647010728,
                  "lng" : 126.9870527701073
               }
            }
         },
         "name" : "시그니쳐 타워",
         "opening_hours" : {
            "open_now" : false
         },
         "rating" : 4.2
      }
   ],
   "status" : "OK"
}

 

 

최근 Browser Migration을 할 일이 잦다.

Conversion Tool로 초반 작업을 하고난 이후에

download 부분이나 alert 관련 부분이 남는데, 그러면서 메세지 타입을 갈무리 해봤다

 

1. alert, confirm

 - 보통 대부분의 IE와 Chrome 웹 페이지 메시지는 이렇게 뜬다.

 - IE에서 ctrlId = 65535

 - Type1은 Browser Console창에서 Alert("메세지")로 띄울 수 있고, Type2는 업로드나 다운로드 위치 같은 걸 틀려보자.

 - Type1(IE는 Win32 라이브러리 느낌으로 뜨고, Chrome은 크롬 위젯 Alert로 뜸)

   <IE의 Alert> : 정보가 부족해 보이지만 잘 가져온다.

<wnd app='iexplore.exe' cls='#32770' />
<wnd ctrlid='65535' aaname='*' />

 

  <Chrome의 Alert> : 굉장히 지저분해 보이지만 role을 Text로 잡으면 빈값을 가져오거나 한줄만 가져온다.

<wnd app='chrome.exe' cls='Chrome_WidgetWin_1' />
<ctrl name='*내용:' role='dialog' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' idx='1' />
<ctrl role='pane' />

* 테스트 해보니 이렇게 하면 인식 자체가 안 되는 케이스도 존재했다.

<wnd app='chrome.exe' cls='Chrome_WidgetWin_1' title='*Chrome' />
<ctrl name='*내용:' role='dialog' />
<ctrl role='text' />

=> 안 될 때는 이 방법으로도 시도


- Type2(IE와 크롬 모두 Win32 라이브러리 느낌으로 뜸)

  <IE, Chrome 공통> : 보통 파일 업로드, 다운로드 등에서 에러났을 때 cls가 DirectUIHWND로 뜨는 타입이다. 

<wnd app='*.exe' cls='#32770' title='*' />
<wnd aaname='*' cls='DirectUIHWND' />
<ctrl name='*' role='pane' />
<ctrl name='*' role='text' />

2. prompt

 - 자주 쓰이진 않지만 prompt를 잡아야 하는 경우도 있다.

 - 여기서도 IE, Chrome은 각자 다른 라이브러리를 쓰는 것으로 보인다.

  <IE의 경우> : ctrlid가 확실하게 나뉜다.

<wnd app='iexplore.exe' cls='#32770' title='*' />
<wnd ctrlid='8132' /> [텍스트]
<wnd app='iexplore.exe' cls='#32770' title='*' />
<wnd ctrlid='8133' /> [입력창]

  <Chrome의 경우> : 텍스트를 얻으려면 이것의 Name 속성을 가져와야 한다. 입력칸은 바로 Type Into하면 된다.

<wnd app='chrome.exe' cls='Chrome_WidgetWin_1'/>
<ctrl role='dialog' />
<ctrl role='editable text' />

 

이외 확인, 취소 버튼도 비슷하게 잡아주면 된다. [버튼이라 더 잘 구분되기 때문에 이보다 잡기 쉽다.]

** title 속성은 취향인 거 같다. 보통 넣지 않아도 잡힌다.

RPA에서 Excel 사용중 웬만한 '엑셀 자체의 문제'는 엑셀 패키지와 NPOI를 최신화하면 거의 해결된다.

이외 개발 실수로 인한 에러를 줄이는 방법 중,

Excel Application Scope으로 작업할 때 옵션을 어떻게 해야 하는지를 정리해보고자 한다.

Excel Application Scope의 옵션들

* Create if not exists : 이 옵션은 웬만하면 체크해제하길 바란다. 아무 빈 파일이나 만들어서 작업하는 게 아니라면 별로 쓸모가 없다. 파일이 없다면 에러가 나줘야 한다.

* InstanceCachePeriod : 엑셀 scope내에 있는 Activities들이 다 진행된 후 엑셀이 지속되는 시간. Excel Scope이 Loop안에 있거나 연속으로 엑셀을 쓰면서 세션이 간헐적으로 꼬인다면 이걸 높여줘야 한다. 하드웨어 스펙이 좋으면 보통 문제가 없으므로 3000으로 그냥 두고, 퍼포먼스가 필요하면 0으로 바꿔주자. [앞 뒤에 Delay를 줘도 RPC 에러같은 게 자꾸 날 때만 빼곤 그냥 0으로 해도 무방]

* Save Changes : 이 옵션도 해제하고 Save Workbook을 제일 하단에 두자. 특히 이걸 해제하면 엑셀 파트만 테스트하고 싶을 때 굳이 파일을 갈아줄 필요가 없이 Save Workbook만 Disable 걸어주면 된다. 또 이 옵션을 체크하느냐 마냐로 엑셀 작업의 속도가 유의미하게 달라진다.

* Visible : 이건 웬만하면 디버깅할 때만 켜도록 하자. 엑셀 내에서 특별히 뭔가 클릭해서 진행하는 게 있지 않은 이상, 켜면 퍼포먼스 손해다.

 

결국 다 해제하는 게 좋은데 Default가 모두 체크로 돼있어서 그건 조금 아쉽다.

쓸만한 것만 추렸다.

1. MaxIterations

기존에 무한 루프가 될 수 있었던 것을 방지하고자 자체 최대 루프 카운터를 설정할 수 있게 함

MaxIterations

개발규칙에 설정을 강제하면 초보적인 실수들을 방지할 수 있을 것으로 보인다.

[기존에는 가급적 Do While 사용을 지양하고 사용하는 경우 MaxCnt를 같이 할당]

 

2. 환경변수 지정

어디서나 쓸 수 있게 환경변수를 지정한다.

환경 변수 지정

이렇게 하면 모듈단위 테스트 하기가 어려워져서 되게 자주 쓰지는 않을 거 같지만,

이미 검증된 것들에 대해서는 이걸 써서 관리하는 것도 괜찮을 거 같다.

 

3. Start Job의 Arguments 지원

Start Job을 할 때, Main단에서 Arguments가 필수인 과제들이 간혹 있다.

왜 이제야 나왔지

 

4. For Each의 TypeArgument 자동 감지

이건 진작에 나왔어야 된다.

이게 안 됐다보니 항상 For each를 쓰고 내가 바꿔주거나

귀찮으면 안 바꾸고 그냥 item을 형변환해서 썼다. Item.ToString, Cint(Item) 등등

 

** 이 글을 쓰고 세션을 철저하게 끊고 테스트 해보니

A local license is required 라고 뜨면서 진행이 되지 않는다.

라이선스가 없으면 아예 진행이 되지 않는다.

커뮤니티 라이선스라도 있어야 한다.

이하의 방법은 Assistant로 로그인된 상태를 로컬에 잡아둔 다음 진행 가능하다.

 

 

※※※ 비지니스에서 쓸 땐, 꼭 정식 라이선스를 사용하세요 ※※

소스가 있는데 라이선스 없이 일단 실행시켜야 하는 경우가 있다.

물론 라이선스를 사야 하지만 일단 테스트 해보겠다는 식으로 요구하기도 한다.

그럼 윈도우 스케줄러든 뭐든 걸어서 Time schedule을 잡아야 한다.

 

AR 라이선스로 오케스트레이터 로그를 보면서 작업하고 싶은 경우는 아래 글을 참조하자.

https://jnaul.tistory.com/222

 

[Uipath] Attended Bot에 작업스케줄 거는 방법

Attended Bot으로 등록된 Device에는 기본적으로 오케스트레이터에서 프로세스를 Triggering 할 수는 없다. 원칙적으로는 그렇지만 대부분 Attended Bot이 훨씬 가격이 저렴하기 때문에 작업 스케줄러를 통

jnaul.tistory.com

 

라이선스가 없을 때도 컴파일 하는 게 UiRobot.exe인 건 매한가지다.

다만 파라미터가 프로세스 이름이 아닌, 소스 직접 실행의 형태가 된다.

 

"UiRobot경로" execute --file "project.json 경로"

 

이런 형태로 실행시키면 로컬로그만 있지만 실행이 가능하다.

 

*** 이렇게 하고 실행시켰는데 시작도 안 하고 그냥 끝나버린다면 권한문제일 가능성이 높다.

작업 스케줄러 작업의 속성에서 일반-보안옵션-작업을 실행할 때 사용할 사용자 계정을 Users로 바꿔보자.

변경 - 고급 - 지금 찾기 하면 Users가 나온다.

====================================

악용 금지

최종 input aruments까지 넣는 경우,

{uirobot_경로}/UiRobot.exe execute --process {ProcessName in Orchestrator} --folder {Folder name in Orchestrator} --input {'arg1' : 'Test1', 'arg2' : 'Test2'}

UiRobot.exe의 파라미터에 대한 공식 문서

https://docs.uipath.com/robot/docs/arguments-description

 

Arguments Description

To make it easier for you to work with command line arguments, navigate to the directory in which the Robot is installed using the change directory command. For example, if you did not change the default location of the Robot, you can use the following com

docs.uipath.com

 

+ Recent posts