드물게 Find Children을 통해 element값을 가져와서 동적으로 처리해야 하는 케이스가 발생한다.
그 과정에서 기준 요소를 찾고 규칙적인 값을 Datascraping으로 가져올 수 있다.
다만 규칙에 반하는 예외요소들이 있을 수 있다.
가령 호텔의 후기를 가져오는데 어떤 후기는 특정 값이 채워져 있고 어떤 후기는 안 채워져 있어서
후기 폼이 달라진다고 가정하자.
이 경우 2가지 접근법이 있을 수 있다.
1. Datascraping을 경우의 수만큼 n번 나눠서 하고 결과물을 merge한다.
2. 각 element를 쪼개면서 조건을 따지고 가져온다.
2번으로 하고 싶은 경우 먼저 Find Children으로 element ienumerable을 가져오고,
각각의 element의 속성값을 가져와야 한다.
단, 이 방식은 VB.NET으로만 되는 것으로 보인다. (C# 템플릿에서는 해당 method가 없음)
[VB.NET] 에서의 방식
assign을 활용해 다음과 같이 설정
sValue = DirectCast(uiElementVar.Get("text"), String)
[Get의 ToString이 어떤 형태를 overide해야 할지를 모르기 때문에 에러가 난다. 예를 들어 속성값중 boolean인 value도 있고 region 객체가 나올 수도 있다. 그래서 DirectCast를 했는데 스타일에 따라 object로 일단 받아놓고 그 값을 ToString해서 쓸 수도 있다.]
[C#]에서의 방식
invoke code를 통해 다음과 같이 설정
Arguments에 in으로 uielement 변수, out으로 value를 받을 string 변수 설정
string elementText = uielementVar.Get("innertext").ToString();
sResult = elementText;
이때 get을 해오는 기전은 DataScraping이 하는 것과 동일하다.
(Find Children을 할 때 이미 한번에 해당 데이터 아래의 요소들을 한번에 다 긁어온 거로 볼 수 있다.)
따라서 각각 get Text를 하는 것에 비해 속도가 월등히 빨라진다.
복잡한 조건으로 가져오는 게 아니라면 웬만하면 Datascraping으로 가져오는 것을 권장한다.
※ aaname같이 uipath에서 임의로 붙여주는 것은 못 가져오는 케이스도 있어 보인다. 별 문제가 없으려면 최대한 element 내부의 고유 속성 기준으로 가져와야 될 거 같다.
※ 기왕 나눠서 가져오고 있다면 값에 대한 정합성 체크를 넣어주는 것을 추천드린다. 그러지 않고는 이런 구조로 가져갔을 때의 장점이 많이 사라진다.
'RPA Uipath' 카테고리의 다른 글
[Uipath] 랜덤하게 Array에서 n개 뽑기 (0) | 2023.11.08 |
---|---|
[Uipath] Office 365 Secured SMTP 설정 (0) | 2023.10.06 |
[Linq] 키 값 필터링 (0) | 2023.07.28 |
[Uipath] Excel Application Scope: 통합 문서를 여는 동안 오류가 발생했습니다. Excel이 설치된 경우 홈 화면의 도구 탭에서 'Microsoft Office Interop용 복구 도구'를 실행하십시오. (0) | 2023.03.15 |
[Uipath] DataTable to JSON & JSON to DataTable (0) | 2023.03.06 |