XPATH에 변수 값을 반영하여 객체를 탐색하는 예제를 설명하도록 하겠습니다.
XPATH는 3.2 버전부터 지원하는 기능입니다.
네이버 사이트 "메일","카페", "블로그", ..., "웹툰" 을 차레대로 방문해서 내용을 수집하는 스크립트를 작성합니다.
UI 객체를 선택하기 위해서 XPath를 사용하도록 하겠습니다. XPath 변수를 선언합니다.
네이버 페이지의 메일 영역을 선택하겠습니다.
아래 그림과 같이 XPath 영역이 선택되었음을 확인하였습니다.
스크립트 작성을 위해서는 "메일" 부터 "웹툰" 까지 9개의 UI 객체를 선택하여 스크립트에 반영해야 합니다.
1번과 2번을 선택하여 XPath 값을 비교하였을때, 아래와 같은 차이점이 있었습니다.
"//*[@id=\"shortcutArea\"]/ul/li[1]/a/span[1]"
"//*[@id=\"shortcutArea\"]/ul/li[2]/a/span[1]"
"li" 태그 값(순서)외에는 동일한데, 한번만 선택한 후 값만 변경해서 사용할 수 있는 방법이 없을 까요?
아래 그림과 같이, index 라는 정수(int)형 변수를 선언하였습니다. 그리고 "EDIT XPATH" 창에 있는 XPATH 값을 변수를 적용하여 수정하였습니다.
네이버 페이지 선택대상은 아래와 같은 XPATH 로 정의될 수 있습니다.
메일:
"//*[@id=\"shortcutArea\"]/ul/li[1]/a/span[1]"
카페:
"//*[@id=\"shortcutArea\"]/ul/li[2]/a/span[1]"
블로그:
"//*[@id=\"shortcutArea\"]/ul/li[3]/a/span[1]"
쇼핑:
"//*[@id=\"shortcutArea\"]/ul/li[4]/a/span[1]"
뉴스:
"//*[@id=\"shortcutArea\"]/ul/li[5]/a/span[1]"
증권:
"//*[@id=\"shortcutArea\"]/ul/li[6]/a/span[1]"
부동산:
"//*[@id=\"shortcutArea\"]/ul/li[7]/a/span[1]"
지도:
"//*[@id=\"shortcutArea\"]/ul/li[8]/a/span[1]"
웹툰:
"//*[@id=\"shortcutArea\"]/ul/li[9]/a/span[1]"
XPath 변수 한개를 사용하고, index 변수 값을 바꾸면서 실행을 하면 원하는 결과를 얻을 수가 있습니다. 아래 그림은 최종 구현된 스크립트입니다. 아래 스크립트를 수행하게 되면 "메일" 부터 "웹툰" 까지 반복적으로 클릭을 수행합니다.
1. HBrowser Scope는 Browser를 실행하는 역할을 수행합니다.
2. XPath를 index 값에 따라서 수행되도록, For Loop를 사용하였습니다.
3. Assign 이벤트 아이템을 사용하여 For Loop 의 i 값을 index에 반영합니다.
4. HBrowser Click을 사용하여 XPath 대상에 대한 클릭을 수행합니다.
5. HBrowser Click 내 XPath Variable 속성에 XPath 변수값을 적용하였습니다.
6. Delay Time을 사용하여 클릭 후 일정시간 기다리도록 하였습니다.
7. HBrowser Control을 사용하여 이전 페이지로 이동하였습니다.
XPath를 사용하면, 기존 Selector 방식보다 더 유연하게 UI 선택(인식)을 수행할 수 있습니다. 아래는 Selector 와 XPath 로 UI Select(인식)을 했을 때 비교할 수 있는 내용입니다.
XPath를 사용하게 되면, 적은 수의 UI Select(인식)를 가지고 XPath 값을 상황에 맞게 값을 바꾸면서 다양하게 활용할 수 있습니다.