이전글
2023.07.10 - [분류 전체보기] - TagUI (오픈소스 RPA) - 2 :: tag 파일 작성하기(기초편)
자동화 스크립트(.tag) 작성하기 (고급편)
1. 변수 사용하기
# 변수에 값 할당하기 1
test_arg = "Friday"
# 변수 사용하기
echo `test_arg`
# 변수에 값 할당하기 2
read [DOM/XPath/Region/Image] to [variable]
# 변수에 값 할당하기 2 - 예시
read //p[@id="address"] to address
- 변수 저장은 일반적이다 (변수명="값")
- 변수 사용은 ` (backquote)로 묶어 사용한다 (`변수명`)
- 웹사이트 엘리먼트의 필드 값을 변수에 저장하고 싶을 경우 read를 사용하면 된다 (변수에 값 할당하기 2 참고.)
2. if 문 사용하기
if "값" "비교문" "비교값"
Action 1
Action 2
...
- "비교문" 에는 일반적 비교문을 사용하지 않는다 (==. !=, <, > 등)
- == : eqluals to
- != : not equals to
- > : more than
- < : less than
- && : and
- || : or
- if문에 function 사용도 가능하다 (아래 Functions 사용 참고)
- if문에 자주 주로 사용하는 함수 : contain(), exist(), present()
- 비교문 예시 코드
# equals to (==)
if (day == "Friday")
if `day` equals to "Friday"
# not equals to (!=)
if (day != "Friday")
if `day` not equals to "Friday"
# more than (>)
if A > B
if `A` more than `B`
# less than (<)
if A < B
if `A` less than `B`
# and (&&)
if A < B && C > D
if `A` more than `B` and `C` less than `D`
# or (||)
if A < B || C > D
if `A` more than `B` or `C` less than `D`
# complex (<=)
if A <= B
if `A` more than `B` or `A` equals to `B`
# contain
# A에 "Friday"가 포함되어 있을 경우 true, 그렇지 않으면 false
if `A` contains "Friday"
# exist
# 요소가 존재하면 timeout까지 대기 후 true 반환, 그렇지 않으면 false
if exist('[DOM/XPath/Image]')
# present
# 요소가 존재하면 바로 true 반환, 그렇지 않으면 false
if present('[DOM/XPath/Image]')
3. for문 사용하기
for 변수 from "start_num" to "end_num"
{
Action
}
# 예시
for n from 1 to 4
{
echo `n`
}
- 일반적인 for문 구조와 동일하므로 추가 설명할 것이 없다
4. 구문 내 Custom code 사용하기
custom [custom 구문] custom begin [custom 구문] custom finish |
- custom에 사용할 custom code의 약어를 기재하면 된다.
- 사용가능한 Custom code는 javascripts(js), python(py), vision(vison), dom(dom), r(r), shell command(run) 이다.
- shell command(run)는 begin ~ fisnish 구문으로 사용은 안된다.
- custom code 예시 코드 (javascripts)
js obj = JSON.parse(api_result)
dump `obj` to result.json
js begin
obj = JSON.parse(api_result)
randomInteger = Math.floor(Math.random() * Math.floor(5)) + 1
js finish
dump `obj` to result.json
// declare and initilise variable to use it inside/outside js code block
a = ""
js begin
a = "some string"
js finish
echo `a`
- python, vision, dom, r 모두 사용법은 동일하다.
- shell command의 예시는 아래와 같다.
# Windows
run cmd /c mkdir new_directory
# Linux
run mdkir new_directory
5. 별도 tag 파일 실행 (분리)
tagui 스크립트명.tag
# 예시
tagui login.tag
- tagui는 스크립트(.tag)에서 다른 스크립트(.tag) 실행이 가능하다.
- 해당 기능을 통해 재사용이 가능한 기능은 별도 스크립트를 작성하여 모듈화 할 수 있다.
- 부모.tag → 자식.tag 실행 시 부모.tag에서 생성한 변수를 사용 할 수 있다.
- 자식 스크립트 동작 종료 시 부모 스크립트로 동작이 전환된다.
6. 파일 다루기
# 신규파일에 쓰기
dump [text] to [filename]
dump [`variable`] to [filename]
# 신규파일에 쓰기 예시
dump First Name,Last Name to names.csv
# 기존 파일에 쓰기
dump [text] to [filename]
dump [`variable`] to [filename]
# 기존 파일에 쓰기 예시
write firstname,lastname to names.csv
write `fullreport` to report.txt
# 파일 내용 읽기
load [filename] to [variable]
# 파일 내용 읽기 예시
load report.txt to report
- 신규 파일을 쓸 경우는 dump 키워드를 사용한다.
- 기존 파일에 쓸 경우는 write 키워드를 사용한다.
- "write firstname,lastname to names.csv" 시 names.csv 첫행에 "firstname lastname" 으로 저장된다.
- "write `fullreport` to report.txt" 시 fullreport 변수에 담긴 내용이 report.txt에 저장된다.
- csv를 더 원활히 다루기 위해서는 csv_row() 함수를 사용하면 된다.
# csv_row() 예제
read name_element to name
read price_element to price
read details_element to details
write `csv_row([name, price, details])` to product_list.csv
7. Helper functions
- TagUI는 많은 function을 지원한다.
- count(), get_files(), get_text(), del_chars(), get_env() 등 텍스트/파일을 다루는 함수를 지원한다..
- mouse_xy(), mouse_x(), mouse_y(), clipboard() 등 마우스 및 키보드를 다루는 함수도 지원한다.
- 자세한 설명 및 예제는 Tagui docs를 활용하자. (Reference — TagUI 6.110.0 documentation)
TagUI는 고급화된 기능을 사용하기에 예제나 커뮤니티가 덜 발달되어 있어 어려움이 있어 고급화된 기능 및 복잡한 기능은 아무래도 상용 유료제품 검토가 필요해 보인다.
다만, Documentation이 잘 되어 있어 활용하기 편하기 때문에 간단한 웹 스크래핑 또는 자동화를 위해 무료로 사용하기 편리하다.
세상에 좋은 기술은 많지만 사용자에 따라 기술은 다르게 사용된다.
자동화를 위해 유료 제품부터 구매해서 사용하기 에 앞서 TagUI 같은 무료 제품을 사용해보고 유료 제품을 검토하는 것이 좋을 것 같다.