웹사이트 내 수 많은 expand ui가 있고 expand할 때 마다 하위 정보들이 나오는 구조입니다.
selector를 바꿔가면서 expand ui를 열고 닫는거 까지는 했는데요,
expanded된 화면의 하위 데이터만 스크래핑을 하고 싶은데 스크래핑할 때
지정했던 첫 번째 expand 메뉴의 하위 데이터들만 스크래핑 되는 문제가 있습니다.
expand ui처럼 화면이 리프레시 되지 않는 경우 어떻게 스크래핑을 해야 하는지 궁금합니다.
웹사이트 내 수 많은 expand ui가 있고 expand할 때 마다 하위 정보들이 나오는 구조입니다.
selector를 바꿔가면서 expand ui를 열고 닫는거 까지는 했는데요,
expanded된 화면의 하위 데이터만 스크래핑을 하고 싶은데 스크래핑할 때
지정했던 첫 번째 expand 메뉴의 하위 데이터들만 스크래핑 되는 문제가 있습니다.
expand ui처럼 화면이 리프레시 되지 않는 경우 어떻게 스크래핑을 해야 하는지 궁금합니다.
안녕하세요
리프레시되지 않는경우 스크래핑할 웹사이트를열고 f12키를 눌러 개발자모드에서 Select부분을 수정하 or UI Explorer에들어가셔셔 스크래핑할부분을 선택해야될거 같습니다.
더 자세한 판단을 위해서는 해당 사이트의 스크린샷이 필요할 것 같습니다만, 화면이 리프레시되지 않는 형태의 사이트의 경우 사실은 Document에 다 로드 되어있고 특정 UI의 클릭 이벤트 등을 통해 표시 상태만 동적으로 바뀌도록 되어있는 경우를 종종 봤습니다.
이런 경우에는 UI Explorer에서 각 expand ui 요소를 각각 찍어보면서 셀렉터를 자세히 분석해보는 것이 좋습니다.
임의로 idx=‘2’ 같이 인덱스를 직접 셀렉터에 추가해서 겉으로는 보이지 않는데도 엘리먼트로 잡히는 것이 있는지 등을 확인해 보시는 것도 좋습니다.
네 그래서 지금 이것저것 해보고 있는데요 idx들이 리니어하지를 않네요.
사이트는 카카오 챗봇 오픈 빌더입니다. 좌측의 시나리오01, 02 우측에 있는 화살표를 눌러 expand한 뒤 밑에 나오는 text들을 스크래핑하는 게 목적입니다.
시나리오01, 02의 셀렉터를 찾아서 expand까지는 했는데 데이터 스크래핑 기능을 이용하면 계속 시나리오01 하위의 텍스트들만 스크래핑을 하네요.
해당 사이트는 따로 뭐 신청을 해야하는 것 같아서 직접 셀렉터를 따서 볼 수가 없네요.
대신 몇 가지 참고 될만한 내용을 조금 더 생각해 봤습니다.
1. 데이터 스크래핑 대신 Find Children, For each, Get Text로 낱개 추출
아무리 봐도 데이터 스크래핑으로 잘 안되겠다 싶으면 그냥 For each로 해결할 수도 있을 것 같습니다.
Find Children 액티비티를 사용하면 대상 엘리먼트 하위에 있는 모든 자식 엘리먼트를 IEnumerable(Of UiElement)로 반환합니다.
따라서 For each가 가능합니다. TypeArgument는 UiPath.Core.UiElement로 하시면
item.Selector.Text로 자식 엘리먼트의 셀렉터 값을 String으로 받을 수 있는데,
If 등으로 패턴에 걸리는 것들만 Get Text하셔서 List 같은 콜렉션에다가 추가하거나 데이터테이블에 Add Data Row 하는 방식도 고려해볼 수도 있을 것 같습니다.
2. Extract Structured Data 액티비티의 셀렉터의 동적인 처리
Extract Structured Data 액티비티도 셀렉터 혹은 엘리먼트 속성이 사용 가능하므로 변수 사용으로 동적 처리도 가능합니다.
셀렉터에 변수를 사용하시거나 앞 단에 Find Element를 추가하여 UiElement 변수를 받아서 Element속성에다가 넣어주는 방식으로 동적 처리가 필요할 수도 있을 것 같습니다.
3. ExtractMetadata의 수동 수정
웹사이트의 경우 Table 태그 엘리먼트를 추출하는 게 아니라면 이런 느낌으로 자동 생성 되어있을 건데요,
*컬럼이 단 한 개 짜리 스크래핑의 경우 상단의 <row>에서</row>까진 없을 수 있습니다.
셀렉터로 잡히는 엘리먼트를 시작점으로 해서 추출 위치를 HTML상에서 보이는 순서대로
아래에 의 형식의 XML태그로 써주시면 그 위치를 스크랩 하도록 되어있습니다.
단 스크래핑의 기준이 되는 공통패턴 부분은 idx를 쓰지 않습니다.
예를 들어 해당 웹사이트가 이런 구조인 경우
<div> <-셀렉터로 잡는 대상 엘리먼트
<div> <-공통부분
<span></span>
<span></span> ← 스크랩 대상
<div> <-공통부분
<span></span>
<span></span> ← 스크랩 대상
</div>
따라서 아래내용이 <column> 과 </column>사이에 들어가면 됩니다.
<webctrl tag=‘div’/>
<webctrl tag=‘span’ idx=‘2’/>
이를 바탕으로 정확한 스크래핑 위치를 수동으로 지정해볼 수도 있습니다.
감사합니다. 가르쳐주신 방법대로 이렇게 저렇게 하다 결국 해결했습니다. 다시 한번 감사의 말씀 드립니다.