이전글
2023.07.07 - [분류 전체보기] - TagUI (오픈소스 RPA) - 1 :: 솔루션의 이해, 설치 및 실행하기
자동화 스크립트(.tag) 작성하기 (자동화 하기)
작성한 스크립트 사용하기
더보기
- 작성한 스크립트는 "파일명.tag"로 저장 후 위에 [실행하기] 챕터를 참고하여 실행하면 된다.
- 사전에 스크립트가 정상적으로 작동하는지 확인 시에는 커맨드창에 "tagui live" 입력 후 스크립트 내용을 한줄씩 입력하면서 확인하면 된다. (윈도우, 리눅스 동일)
사전지식
- 자동화 스크립트를 작성하기에 앞서 Xpath 개념의 사전 습득 필요
- 참고 글 : 2023.06.29 - [분류 전체보기] - XPath의 이해 (초급편)
XPath의 이해 (초급편)
WEB 스크래핑을 위한 Element 값 선정을 위해 간단히 알아본 XPath에 대해 이야기 해보려 한다. XPath란? XPath는 XML문장 속의 요소, 속성등을 지정하기 위한 언어이다. W3C(월드 와이드 웹 컨소시엄) 표준
hahahax5.tistory.com
- 작성 전 "tagui live"를 통해 확인 후 작성하기를 권장한다.
- 아래 설명은 윈도우11 환경 하 tagui live를 통해 작성한 자료이며, 리눅스의 경우도 실행 명령어는 동일하다.
XPath 경로 쉽게 찾는 법
- Chrome/Edge 브라우저의 개발자 모드를 활용한다 (F12 버튼으로 활성화)
- 개발자 모드 → [Shift+Ctrl+C] 클릭 (엘리먼트 선택기) → 찾고자하는 엘리먼트를 클릭
- XPath를 찾는다.
방법 1 : HTML 코드 내 해당 구문 선택 → 오른쪽 버튼 → 복사 → XPath 복사
방법 2 : HTML 코드를 보고 엘리먼트 속성에서 유일한 값을 찾는다. ex) name="qurey"
방법 3 : HTML 코드를 보고 엘리먼트 속성을 contain(), text()로 식별한다. ('Xpath의 이해(초급편)' 참고)
0. 들어가기에 앞서
- 샘플은 Okky 사이트 접속 후 게시판 조회하는 시나리오로 진행
- 각 항목은 [샘플코드 - 결과 캡쳐화면 - 설명] 순으로 기재된
- 환경은 리눅스 GUI환경에서 "tagui live" 모드로 크롬 브라우저로 진행 (윈도우 환경 동일)
- 윈도우 cmd, 리눅스 GUI 터미널 에서 "tagui live"를 입력하면 된다.
- 윈도우 CMD 에서 tagui live 사용 시 한글 입력에 대한 encoding 문제가 존재하지만 .tag파일로 작성하여 실행하면 한글도 정상 동작된다.
- 엘리먼트의 경우 아래과 같은 방법 중 하나로 입력하면 된다. (모든 기능에 동일하게 적용되며, 이하 기능 설명에는 생략함)
- //엘리먼트 (위 예시)
- //엘리먼트[@속성명="속성값"]
: type //main//input[@type="text"] as RPA [enter]
- //엘리먼트[contains(@속성명, "속성값")
: type //main//input[contains(@type, "tex")] as RPA [enter]
1 . 사이트 접속하기
https://okky.kr
- URL 입력만 하면 된다.
2. 클릭하기 (click)
click //*[@id="__next"]/header/nav/div/div[1]/div/div[3]/a
- [click "엘리먼트"]로 해당 영역에 대한 클릭을 할 수 있다.
- 엘리먼트는 상단 메뉴 "커뮤니티"의 XPath이다. (XPath경로 쉽게 찾는법 참고.)
- [click "엘리먼트"] 외 "마우스 좌표값", "이미지 파일명" 등으로 사용도 가능하다.
- click (500, 300)
- click button.png
- click image/button.png - 마우스 좌표값을 활용한 클릭은 화면의 제어권이 tagui로 넘어간다는 것을 유의해야 한다.
- 마우스 좌표값으로 클릭을 동작 시 tagui가 마우스를 움직인다.
- 마우스 좌표값을 사용하여 자동화 시에는 사용자가 자동화 중인 화면을 사용하면 안된다. (윈도우의 경우 PC, 리눅스의 경우 해당 사용자의 shell)
- XPath, 이미지 파일명 클릭시에는 해당 크롬 브라우저 영역의 제어권만 tagui가 갖는다.
3. 검색창에 검색어 입력하기 (type)
type //*[@id="__next"]/main/div/div[2]/div/div[4]/div[2]/div[1]/div/input as RPA [enter]
- [type "엘리먼트" as "입력어"]로 브라우저에 텍스트를 입력할 수 있다. (type = 입력하다)
- 엘리먼트는 중간부분에 "RPA"가 입력되어 있는 검색창의 XPath이다 (캡쳐화면은 입력어 입력 후 화면)
- 입력어(RPA)와 함께 [enter]를 같이 입력하였기 때문에 검색이 바로 수행된다.
- "입력어"에는 변수로 사용 가능하다.
- 변수 사용 시에는 `변수명`로 사용해야 한다.
: input_text = "RPA"
: type //*[@id="__next"]/main/div/div[2]/div/div[4]/div[2]/div[1]/div/input as `input_text` [enter] - 참고로 naver의 경우에는 input 엘리먼트의 id 속성이 있으므로 [type query as 키워드]로 입력 해도 된다. ("0. 들어가기에 앞서" 참고)
- 특수키 입력
- [shift] [ctrl] [alt] [win] [cmd] [enter]
- [space] [tab] [esc] [backspace] [delete] [clear]
- [up] [down] [left] [right] [pageup] [pagedown]
- [home] [end] [insert] [f1] .. [f15]
- [printscreen] [scrolllock] [pause] [capslock] [numlock]
- type query as [clear](입력칸 비우기) , type query as [enter](엔터입력) , type query as [clear]키워드[enter] (입력칸 비우기+키워드 입력 + 엔터 입력)
- 현재 윈도우 CMD 사용 시 인코딩 문제로 한글입력이 안되는 현상이 있음 (chcp 65001 사용해도 동일)
- tag 파일에서 한글입력은 정상이며, 리눅스 데스크탑에서도 한글 정상입력 됨
4. 엘리먼트 값 읽기 (read)
read //*[@id="__next"]/main/div/div[2]/div/div[5]/div/ul/li[2]/div/div[2]/a to title
- [read "엘리먼트" to "변수"]로 브라우저의 텍스트를 변수에 저장 할 수 있다.
- 엘리먼트는 검색 결과 2번째 글인 "RPA와 웹개발 사이 고민.."의 XPath이며, 변수는 "title"이다.
- 단순히 Read만 하였기 때문에 title = "RPA와 웹개발사이 고민.."이 결과이며, 별다른 output이 없다.
- 리스트 형식(게시판에 글이 목록으로 있는 경우)은 For loops를 활용하여 변수 저장, 파일 저장, 출력 등을 한다. (for문은 별도로 다룰 예정)
- 단순 화면 출력은 echo를 활용하면 된다. (아래 "5. 화면 출력 참고")
5. 화면 출력
echo `title`
echo 글 제목 : `title`
- [echo "텍스트"], [echo `변수명`]으로 출력할 수 있다
- 1번 라인은 "4. 엘리먼트 값 읽기(read)"이며, 2번 라인은 그 결과가 저장된 "title" 변수에 대한 출력 구문이다.
- 4번 라인은 "텍스트 + 변수"로 출력(echo) 하는 구문이며, 그 실행 결과가 5번 라인이다.
- 텍스트와 변수를 혼합하여 사용 할 수있다.
- 변수는 .tag파일에 내에서 선언, 엘리먼트에서 읽은 값 등을 활용하면 된다.
- 리스트 형식은 read(엘리먼트 값 읽기)와 마찬가지로 For loops를 활용하여 출력하면 된다.