본문 바로가기
카테고리 없음

[RPA]TagUI (오픈소스 RPA) - 3 :: tag 파일 작성하기(고급편)

by 이뫼장 2023. 8. 22.

이전글

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 같은 무료 제품을 사용해보고 유료 제품을 검토하는 것이 좋을 것 같다.