TagUI教程
资源网址
GitHub开源地址:https://github.com/aisingapore/TagUI
中文技术文档:http://www.tagui.com.cn/setup.html
原技术文档:https://tagui.readthedocs.io/en/latest/index.html
环境安装
Windows
资源下载
各类TagUI安装/插件/资源 国内下载,请访问:
链接:https://pan.baidu.com/s/1GrkOxmu9fTBpwzO1JzaNUw?pwd=tagu
各类TagUI安装/插件/资源 原下载,请访问:
TagUI v6.110 zip 文件: https://github.com/kelaberetiv/TagUI/releases/download/v6.110.0/TagUI_Windows.zip
- [MS Word 插件安装程序](https://storage.googleapis.com/tagui-dependencies/TagUI WordAddIn/TagUIWordAddInSetupV3.18.zip)(一个使 RPA 变得非常简单的全功能应用程序)
- RPA 学习者提供的 有关安装和运行第一个 MS Word RPA 机器人的视频。
- MS Excel 插件安装程序 (Excel 中定义 RPA 数据参数并从 Excel 运行 TagUI)
- RPA 学习者提供的 有关使用 Excel 插件安装和创建可视化的视频。
简易自动安装方式 (不建议)
TagUI v6.46 Windows 安装包 ,下载安装即可。
手动配置安装方式
- 下载 TugUI zip 压缩包,下载点击: TagUI v6.109 for Windows
- 解压到硬盘,例如:
D:\
,不建议解压在文件夹内 - 安装 OpenJDK for Windows(已经安装可跳过)
- 安装 Python (已经安装可跳过)
- 安装 Chrome 浏览器(已经安装可跳过)
- 安装 Microsoft Visual C++ Redistributable 2012 X86 版本(已经安装可跳过)
- 环境变量Path增加TagUI路径,注意需要
scr
目录,不是根目录,例如:D:\tagui\src
- 按 Win + R,输入
cmd
,进入CMD命令行模式。 - 复制下面这行命令,粘贴到CMD运行展示样例:(路径改为安装的实际路径)
1 | tagui D:\tagui\flows\samples\8_chineseflow.tag |
系统编码设置
中文Windows系统的CMD默认编码是GBK,流程执行中的中文会显示乱码,改成UTF-8编码:
- 首先,管理员身份打开命令提示符窗口。在窗口顶部右击选择属性,选中选项后会看到默认编码为GBK。(OEM一样乱码)
- Win + R 打开运行窗口后输入
regedit
,点击确定按钮,打开注册表窗口,按照图中的路径打开command processor
项
- 右键新建字符串值,设置完名称后右击打开窗口后输入数值数据
chcp 65001
,点击确定保存,即可完成设置了
基础功能
执行流程
TagUI通过运行 流程文件 flows
自动执行操作,流程文件扩展名是 .tag
。
可以在CMD命令提示符/终端中运行流程: 命令使用格式:
当前目录:
1 | tagui my_flow.tag |
绝对路径:
1 | tagui c:\tagui\samples\1_google.tag |
也可以设定按固定计划运行流程,按固定计划自动运行流程通常很有用:每月、每周、每天甚至每 5 分钟一次。例如在 Windows 上,使用任务计划程序:
快捷执行
可以使用以下命令创建快捷方式文件 -deploy
:
1 | tagui my_flow.tag -deploy |
或者使缩写方式 -d
:
1 | tagui my_flow.tag -d |
这将创建一个快捷方式 (my_flow.cmd),只需双击快捷方式即可运行流程。该快捷方式与流程位于同一文件夹中,但可以将其移动到桌面或其他任何位置。
如果想增加更多参数,例如 -headless
(-h
),可以这样写命令:
1 | tagui my_flow.tag -h -d |
注意
原.tag文件路径被移动,相关的.cmd快捷文件会失效。
运行云端.tag
可以把.tag
文件放在服务器,并用下面命令运行:
1 | tagui https://raw.githubusercontent.com/kelaberetiv/TagUI/master/flows/samples/1_google.tag |
隐藏浏览器运行
可以不显示Web浏览器来运行Web流程,使用 -headless
参数
1 | tagui my_flow.tag -headless |
或使用快捷方式-h
:
1 | tagui my_flow.tag -h |
这允许在流程运行时正常使用电脑,但如果流程中使用可视自动化(例如OCR、图像识别等),则无法正常运行,因为流程需要读取并单击屏幕上的内容
基础命令
自动化RPA流程是由基础命令组成的,以下是一些常见命令。
click 鼠标左键单击
点击命令,可以使用它来单击Web元素:
1 | click Getting started |
此命令单击WEB元素,点击定位可以用“ID”,“name”,“class”或“title”属性,这里有个使用 XPath的例子:
XPath是一种强大的定位元素方式,例如:
1 | click //a[@class="icon icon-home"] |
还可以单击屏幕上的某个坐标点:
1 | click (500,300) |
命令里的500和300是X-Y坐标。此命令点击距离屏幕左侧为500像素,距离屏幕顶部300像素的位置。可以在TagUI Live模式下使用 mouse_xy()
辅助函数寻找XY坐标点,当然更推荐使用一些小工具更方便的知道XY坐标。
click
还可以使用图像识别(Visual Automation)单击先前保存的图像所匹配的位置。下面这条命令会在屏幕范围寻找类似 button.png 的位置,然后单击它。注意:TagUI只识别桌面区域,浏览器区域不一定识别。
1 | click button.png |
当然,好的编程习惯,是把图片都放在 image
目录下:
1 | click image/button.png |
WEB访问
直接输入网址,TagUI就会在Chrome里打开:
1 | https://somewebsite.com |
type 文本输入
可以在网络输入中输入内容。此命令以与单击步骤相同的方式查找元素some-input
(元素定位),并在其中键入some-text
(文本内容):
1 | type some-input as some-text |
可以用 [clear]
来清除元素文本,用 [enter]
来按回车:
1 | type some-input as [clear]some-text[enter] |
也可以用图片进行输入定位, 类似 click
一样:
1 | type some-input.png as some-text |
read 读取元素,可读取文本 或某些属性值
用 read 命令读取元素的文本,并且赋值给变量。
下面命令里的 some-element
是元素, some-variable
是变量:
1 | read some-element to some-variable |
read 还可以使用Visual Automation和OCR功能从屏幕区域读取文本。依赖于OCR的读取可能不完全准确。
此命令读取在点(300,400)和(500,550)之间形成的矩形中的所有文本:
1 | read (300,400)-(500,550) to some-variable |
还可以使用XPath读取Web元素的某些属性值。此命令从元素中读取ID属性:
1 | read //some-element/@some-attribute to some-variable |
assign 赋值
对变量进行赋值:
此示例使用count()
辅助函数,计算在 id/name/text 中找到的包含“row”的元素数量,并将其分配给一个变量row_count
以供以后使用:
1 | row_count = count('row') |
元素定位
DOM 和 XPath 标识符仅适用于 Chrome/Edge。要自动化其他浏览器,请使用点/区域和图像标识符。
DOM 元素属性定位
1 | click Getting started |
DOM (Document Object Model) 方式用元素属性进行定位匹配,可以用 id, name, class attributes 或元素本身的文本内容定位元素。注意:这种方式可能因为同名造成定位不准确。
XPath 页面路径定位
1 | click //body/div[1]/nav/div/div[1]/a |
XPath (XML Path Language)用树状结构来定位元素,表达方式可以理解成“某小区66号楼601室书房里桌子左边的第一个抽屉”。
这是针对 Web 元素的最准确的定位方式,推荐使用 XPath 进行元素定位描述。
信息
可以使用 CSS selectors 代替XPath,但XPath是首选。
Point 坐标点定位
1 | click (200,500) |
坐标原点是在屏幕左上角,横向称为X坐标,竖向称为Y坐标,Y坐标100表示从上往下100个像素的位置。本条命令会到距离屏幕左侧200像素,距离屏幕顶部500像素的位置 进行点击。
Region 屏幕区域定位
1 | read (300,400)-(500,550) to some-variable |
这与两点(300,400)和(500,550)之间形成的矩形匹配坐标点。
Image 图像定位
1 | click button.png |
在全屏范围寻找类似图像文件 button.png
的位置进行点击。首先需要截图保存为 `button.png。
1 | click image/button.png |
可以使用图片的绝对路径,同时好的编程习惯,是把图片都放到 image
目录下。并且使用容易理解的文件名,例如:button.png
。
Live mode 用于调试的Live模式
在流程开发中,经常需要测试下一步的操作代码,建议使用Live Mode。
1 | tagui live |
启动 Live 模式后,可以输入一行才执行一行,这样调试起来很方便。下面这张图展示了这个操作。进入 Live Mode 时,TagUI 会自动打开Chrome。
If 条件语句
if 就是“如果”怎样就怎样 的条件逻辑语言,例如:如果出现“登录按钮”就进行点击。
代码举例: 如果 URL网址包含 “success”, 就点击 buttons1 和 buttons2
1 | if url() contains "success" |
url()
是一个辅助函数,用于获取当前网页的网址URL。注意,需要 if
执行的命令,需要在前面缩进空格(或Tab),这表示它们在if
块 中。如果满足条件,就执行if
块 中的命令。
另一个常见的情况是判断某元素是否存在。在这里,“如果在等待超时后未出现某些元素,则访问此网页”。
1 | if !exist('some-element') |
这 !
否定条件来自 JavaScript,TagUI 代码最终会翻译成 JavaScript。
在下面的示例中,检查变量row_count,是否等于5:
1 | if row_count equals to 5 |
以下是 大于more than 和 小于 less than 的命令方式:
1 | if row_count more than 5 |
For 循环
可以在同一流程中使用循环执行多次同样的流程。为了使用不同变量多次运行一个流程,标准方式是使用 DataTables (高级命令).
在此示例中,我们重复块内的流程总共20次:
1 | for n from 1 to 20 |
functions 函数
函数功能是调用 JavaScript 函数,并且返回需要的值。
每个函数后跟小括号 ()
,小括号内可以填写函数的参数。
csv_row()
将一些变量转换为CSV文本以写入CSV文件。它将变量作为参数输入,包含在方括号内 []
(实际上是一个数组 array).
1 | read name_element to name |
clipboard() 剪贴板
从剪贴板读取文本:
1 | dclick pdf_document.png |
对于大量文本内容输入,建议将文本先放到剪贴板,在用 Ctrl+V 粘贴,这比用 type 快很多:
1 | long_text = "This is a very long text which takes a long time to type" |
mouse_x(), mouse_y() 获得坐标点当前位置
获取鼠标的x或y坐标。
在偏移点击目标时,需要先获得 x 或 y 坐标,以下代码示例表示,鼠标先移动到 element.png
,再获得偏移的 x 和 y ,然后单击元素右侧的200像素:
1 | hover element.png |
mouse_xy()
在Live模式下,可以使用 echo `mouse_xy()` 找到鼠标的坐标。
注意,这里用的不是单引号
‘
而是键盘数字1左边按键的
`
1 | echo `mouse_xy()` |
高级命令
保存流程运行结果
tagui/src/tagui_report.csv
可以使用-report
选项(快捷方式)保存运行的 html 日志和流程运行结果-r
。
1 | tagui my_flow.tag -report |
CSV 文件将显示每次运行的一行、开始时间、完成时间、运行期间的任何错误消息、该运行日志文件的链接以及用户的工作组\用户 ID。
处理异常和错误
当流程没按预期进行时,有3种方法可以在Tagui中处理。
第一种方式是针对单条指令错误处理,可以增加 if 判断来预防。例如,检查是否缺少某些UI元素,然后执行XYZ步骤。使用这种方式。
第二种方式是对针对某个流程的错误处理。类似下面的语法,当 Flow.tag 成功运行时才运行。当它检测到丢失(缺少截图文件)或其他一些未知错误时,Tagui将自动抛出错误。
Windows 代码例子:
1 | call tagui flow.tag || tagui error.tag |
第三种方式是全局错误处理。可以对 TagUI 进行配置,以便在每次运行后,进行特殊处理,将报告选项生成的数据或文件发送到某个目标文件夹或 API 端点,以进行错误/成功处理。例如,将所有自动化运行同步到中央存储以进行审计。特殊处理适用于所有运行的 TagUI 流。
DataTables数据表格批量自动化
DataTables是 csv 文件,可以把数据表格作为变化,多次循环运行流程。
Datatable数据文件 (trade_data.csv
) 类似下面格式:
# | trade | username | password | pair | size | direction |
---|---|---|---|---|---|---|
1 | Trade USDSGD | test_account | 12345678 | USDSGD | 10000 | BUY |
2 | Trade USDSGD | test_account | 12345678 | USDJPY | 1000 | SELL |
3 | Trade EURUSD | test_account | 12345678 | EURUSD | 100000 | BUY |
要使用它,可以使用 运行流程。 TagUI 将为数据表中的每一行运行一次(标题除外)。tagui my_flow.tag trade_data.csv``my_flow.tag
在流程中,TagUI 可以使用变量trade
、username
、password
等,就好像它们位于本地对象存储库中一样,并且值将来自该运行的行。
要知道的流程处于哪个迭代中,可以使用该iteration
变量:
1 | echo current iteration: `iteration` |
可重用性的对象存储库
对象存储库是可选的csv 文件,可以存储在流中使用的变量。它们有助于将流与个人数据(例如 Web 流的登录信息)分开,并允许在多个流之间共享通用信息以便于更新。
每个流都有一个本地对象存储库,所有流共享全局对象存储库。本地对象存储库tagui_local.csv
与流位于同一文件夹中。全局对象存储库位于tagui_global.csv
该tagui/src/
文件夹中。
对象存储库可能如下所示:
object | definition |
---|---|
user-email-textbox | |
create account | btn btn–green btn-xl signup-btn |
在流程中,TagUI 可以使用对象email
,作为变量,并且在运行之前它们将直接被定义替换。局部定义优先于全局定义。create account
如果user-email-textbox
是某些 Web 文本输入的标识符,那么可以在流程中使用以下内容:
1 | type `email` as [email protected] |
调用流程
可以通过将大型工作流程文件分解为许多子流程文件来模块化 RPA 工作流程。对于更复杂的 RPA 场景,甚至可以让一个子流程运行其他子流程。
这样做的一些常见原因包括方便在其他流程中重用相同的子流程、通过在子流程中保留步骤顺序来执行更容易组织的特定操作,或者将 Python 或 JavaScript 代码和函数存储在单独的子流程中(使用例如 py begin
和 py finish
代码块)。
在一个流程内调用另一个流程,命令如下:
1 | tagui login_crm.tag |
被调用流程也可以存储在子文件夹中:
1 | // Windows example |
变量可以在父流程和子流程之间使用:(可以理解成变量是全局的)
1 | // username 和 password 变量可以被使用在 login.tag |
可以在父子流中赋值变量 action = 'login'
,配合 if
来控制具体执行哪个子流程:
1 | // crm_steps.tag |
Turbo mode 极速模式,10倍速运行
运行流产时,可使用 turbo 参数开启极速模式(谨慎使用):
1 | tagui flow.tag -turbo |
大多数网站和桌面应用程序都无法适应TagUI的极速模式。如果RPA以超出这些网站的速度运行,经常会报错。报错的点可能是字段和数据未正确填写,表单缺少数据等。
极速模式下问题可能会随机发生,包括在PC上工作,但由于CPU速度的差异而无法在另一台PC上工作。因此,不建议使用Turbo极速模式。实际应用中,如果用极速模式造成某些数据错误,可能最终需要花费更多时间来排除或修复错误造成的后果。
但是,极速模式对某些特定场景的某些用户非常有用。例如,从应用程序中获取数据,超越人类速度的Web端数据输入等。
视觉自动化 OCR
对于许多步骤,可以使用或来结束步骤,告诉 TagUI 使用 OCR(光学字符识别)与屏幕上的某些 UI 元素进行交互。请参阅下面的示例。可以执行此操作的步骤:单击、rclick、dclick、悬停、键入、选择、读取、捕捉、exist()、present()。using ocr``using OCR
1 | click Submit using ocr |
如果使用图像编辑器将文件中 UI 元素的背景设置为.png
100% 透明,则 TagUI 将能够定位该元素,无论其背景如何。
相反,还可以删除某些锚元素(例如框架)附近的前景内容,以便可以使用读取步骤对空白区域中的不同内容进行 OCR。
在流程中编写Python
可以在 TagUI 流程中编写 Python 代码。Python 开发环境需要单独安装。
使用 py
命令告诉 TagUI 调用 python
运行python命令。可以将字符串值传递回 TagUI 然后在Python里 print()。 Python 运行结果将存放到 TagUI 变量 py_result
里。
1 | py a=1 |
也可以使用 py begin
和 py finish
来告诉 TagUI 这部分是 Python 语言:
1 | py begin |
可以这样将变量传递给Python:
1 | phone = 1234567 |
要传递并返回更复杂的数据,例如多个变量,可以使用 JavaScript 和 Python JSON 库来发送和接收 JSON 字符串。传递2个变量,执行一些处理,并返回2个变量:
1 | a = 1 |
上面将 2 个变量从 TagUI 传递到 Python,进行修改,返回 2 个变量,并显示下面的 e
和 f
:
1 | 10 |
创建运行Log日志便于调试
要执行高级调试,可以通过在 tagui/src/
中创建一个空的tagui_logging
文件,在运行流程时记录运行日志。
my_flow.log
存储一步步的执行记录。my_flow.js
是已运行的生成的JavaScript文件。my_flow.raw
is the expanded flow after parsing modules.
运行云端 TagUI
可以使用 免费 Google 服务器 运行Web浏览器或手机上的 Tagui。可以在浏览器的不同选项卡上同时运行最多5个会话。
为了对在云上运行的更多控制,可以在首选的云供应商上运行此Docker 映像 (使用边缘标签获取最新版本)或Docker 文件。
或者在 OpenFlow 上的免费 Node-RED 实例 上运行。 Docker 镜像、Docker 文件和 OpenFlow 云由Allan Zimmermann 维护和赞助。
命令手册
在这里查询各种命令、辅助功能和运行选项
流程命令
鼠标和键盘命令
click 单击
鼠标左键点击目标
可以使用 DOM, XPath Point, Image进行目标定位。
1 | click [DOM/XPath/Point/Image] |
例子:
1 | click Main concepts |
rclick 右键单击
鼠标右键单击目标
可以使用 DOM, XPath Point, Image进行目标定位。
1 | rclick [DOM/XPath/Point/Image] |
参考 click 例子。
dclick 双击
鼠标左键双击目标
可以使用 DOM, XPath Point, Image进行目标定位。
1 | dclick [DOM/XPath/Point/Image] |
hover 鼠标移动
鼠标移动到目标位置
1 | hover [DOM/XPath/Point/Image] |
type 输入
Web输入命令,可以使用 [clear] 清除字段和 [enter] 来点击ENTER键。
可以使用 DOM, XPath Point, Image进行目标定位。
1 | type [DOM/XPath/Point/Image] as [text to type] |
例子:
1 | type search-term as John Wick |
keyboard 按键/按组合键
模拟键盘按键
1 | keyboard [keys] |
可以使用以下这些功能按键:
- [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]
例子:
1 | keyboard [win]run[enter] |
mouse 鼠标
在当前鼠标位置,按下鼠标左键/弹起鼠标左键。
1 | mouse down |
Web 网页端命令
visit 打开网站/url
直接输入网址url(带上 http),TagUI 就会在 Chrome 打开这个 URL。
1 | [URL] |
例子:
1 | https://google.com |
select 下拉选择
修改下拉选择框,注意 as 后面是区分大小写的。
1 | select [DOM/XPath of select input element] as [option value or text] |
例子:
1 | select variant as blue |
table 保存表格数据
将Table表格数据保存到CSV文件,基于网页的Table编号或其XPath 进行目标定位。
1 | table [table number] to [filename.csv] |
例子:
1 | table 1 to regional_exchange_rates.csv |
popup 把下一步操作放到新标签页
把下一步操作放到新标签页里进行。
1 | popup [新标签页URL的特征部分] |
例子:popup board 这里也可以使用 popup top.baidu.com/board 效果是一样的。
1 | https://baidu.com |
frame 针对某些框架操作
指定下一步操作的目标框架范围。
1 | frame [frame name] |
例子:
1 | frame navigation |
download to
指定 Chrome 下载文件的存储位置。默认位置是当前TagUI流程的文件夹。Specifies a location to store file downloads. The default location is the folder of the TagUI flow.
1 | download to [folder location] |
默认情况下 TagUI 启动后 Chrome 不询问下载存放路径,可以在.tag 文件里增加下面这句,让 Chrome 在下载是询问下载文件存放目录。
1 | js chrome_step('Page.setDownloadBehavior',{behavior: 'default', downloadPath: location}) |
upload
上传文件到网站。
仅支持 DOM 目标定位方式。
1 | upload [DOM of upload element] as [filename] |
例子:
1 | upload #element_id as report.csv |
api
调用Web API,并将返回内容保存到变量 api_result
。
如果 API 返回的是JSON数据格式,将自动创建 api_json
。
1 | api https://some-api-url |
例子:
1 | api https://api.github.com/repos/kelaberetiv/TagUI/releases |
Excel
读取中文配置
控制面板 > 语言 > 管理语言设置 > 更改系统区域设置 > 使用utf-8 提供全球语言支持
对 Excel 执行读取,写入,复制,删除 等操作,比如 [workbook]sheet!range
范围。 本功能适用于 Windows 和 Mac 的 Excel 程序。对于部分需要密码的Excel处理,需要用到 excel_password = 'password'
:
variables 变量
可以在Excel语法中使用变量,例如范围或表格 range
or sheet
。TagUI 支持各种版本的 Excel 文件,必须把文件的.扩展名 作为语法的一部分,以便 TagUI 可以识别指令是Excel命令而不是一些JavaScript 代码。
1 | [`workbook`.xlsx]`sheet`!`range` = 123 |
visibility 是否让Excel操作可见
默认情况下,Excel 操作将在后台打开并运行,看不到后台的 Excel 操作。如果希望在 Excel 显示状态下操作,可以在流程中使用 excel_focus = true
。使用 excel_focus = false
在工作流程中再次将其设置为OFF。
对于某些使用场景,甚至可能不希望 Excel 应用程序在后台可见。在这种情况下,可以在工作流程中设置以不可见方式运行 Excel。用于使 Excel 在 RPA 工作流程中再次可见。excel_visible = false``excel_visible = true
读取Excel
从Excel文件读取数据,支持的相对路径和绝对文件路径。如果指定的文件或工作表不存在,则会显示错误。接着,可以指定单元格或某个范围。
1 | variable = [workbook]sheet!range |
读取 列column 和 行row 可以使用标准Excel语法范围描述方式,例如: A:A (column A), B:D (columns B to D), 2:2 (row 2), 3:5 (rows 3 to 5)。如果不指定范围,则默认对全部范围进行操作。
例子:
1 | top_profit = [Monthly Report.xlsx]August!E10 |
Tagui 的后端语言是JavaScript,因此 Data_array 可以像 JavaScript 数组一样使用。
1 | // to work on data in data_array cell by cell |
注意 - 读取多行和列有一个限制,举例: B:D and 3:5 (data array returned will be a 1 x N array instead of the correct row x column array)。这个问题在 v6.87 中已经修复。使用 tagui update
命令升级,或者用 MS Word Plug-in Update TagUI
按钮升级。
写入Excel
使用 Write 命令往Excel内写数据。支持相对和绝对文件路径。如果指定的文件不存在,将创建一个新文件。如果表单不存在,将创建新表。 If the data is an array, the given cell will be used as the top-left cell to write the range of cells.
1 | [workbook]sheet!cell = variable |
例子:
1 | [Monthly Report.xlsx]August!E10 = 12345 |
Tagui 的后端语言是JavaScript,因此 Data_array 可以像 JavaScript 数组一样使用。
1 | // to assign a set of range data with 2 rows of 3 columns |
copy 复制
在Excel文件中复制数据。支持相对和绝对文件路径。如果指定的目标文件不存在,将创建一个新文件。如果目标工作表不存在,将创建一个新工作表。如果数据是数组,则给定单元格将用作左上角单元格来写入单元格范围。
1 | [workbook]sheet!cell = [workbook]sheet!range |
例子:
1 | [Monthly Report.xlsx]August!A1 = [Jennifer Report.xlsx]August!A1 |
delete 删除
删除 Excel 内的数据。支持相对和绝对文件路径。如果指定的文件或工作表不存在,将显示错误。Delete a range of cells by assigning an empty array to it.
1 | [workbook]sheet!cell = "" |
例子:
1 | [Monthly Report.xlsx]August!E10 = "" |
Word
只需将 Microsoft Word 文档的文件名分配给变量即可读取其文本内容,如下所示。 TagUI 将自动 Microsoft Word 复制文本内容并分配给变量。此功能适用于 Windows 和 Mac。
Windows 设置word文件路径举例:
1 | word_text = [Research Report.docx] |
Mac 设置word文件路径举例:
1 | word_text = [Research Report.docx] |
将文本内容读入变量后,可以使用Tagui的函数来处理它,例如 get_text() 和 del_chars(),以获得RPA流程所需的特定信息。标准JavaScript函数也可用于进行字符串处理,可以 Google 搜索 javascript how to xxxx
。 从 Word 读取文本内容后,TagUI 将关闭 Microsoft Word 并继续执行接下去的流程。
只需要将文件名分配给变量,就可以将PDF文件的文本内容赋值给变量。TagUI 将自动执行 PDF Viewer 应用程序以复制文本内容并分配给变量。在 Windows 系统, 需要安装 Adobe Acrobat Reader,并且设置为打开pdf的默认程序。在Mac 系统, TagUI 使用可以查看PDF文件的默认预览应用程序。
Windows 设置pdf文件路径举例:
1 | pdf_text = [Research Report.pdf] |
Mac 设置pdf文件路径举例:
1 | pdf_text = [Research Report.pdf] |
将文本内容读入变量后,可以使用 Tagui 的函数 get_text() 和 del_chars() 来获得RPA流程所需的特定信息。标准JavaScript函数也可用于进行字符串处理,具体可以 Google 搜索javascript how to xxxx
。从PDF文件读取文本内容后,TagUI将关闭PDF查看器并继续使用其余自动化步骤。
Using variables 使用变量
read 读取目标内容放入变量
获取一些文本或值并将其存储在变量中。
可以使用 DOM, XPath, Region, Image 进行目标定位。
1 | read [DOM/XPath/Region/Image] to [variable] |
当提供区域Region 或 图像Image 元素特征时,Tagui 会使用OCR从屏幕中读取字符。
例子:
1 | read //p[@id="address"] to address |
变量赋值
将文本保存到变量。
1 | [variable] = [value] |
在值中使用文本时,请围绕引号中的文本,如 “某些文本”。这使用 JavaScript 的规则,因此可以将数字分配给变量或使用其他 JavaScript 函数。变量名称需要是一个单词,不能以数字开头。
例子:
1 | count = 5 |
File saving/loading 文件保存和读取
dump 文本保存到文件
将文本保存到新文件,例如把一个文本变量,保存到一个txt里。
1 | dump [text] to [filename] |
write 追加写入
将新的文本保存到现有文件中。
1 | write [text] to [filename] |
例子:
1 | write firstname,lastname to names.csv |
load 读取
将文件内容加载到变量。
1 | load [filename] to [variable] |
例子:
1 | load report.txt to report |
snap 截屏
屏幕截图功能,可以是全屏、某个元素或区域。
可以使用 DOM, XPath, Region, Image 进行目标定位。
1 | snap [DOM/XPath/Region/Image/page] to [filename] |
如果使用 page
定位目标,会把整个网页进行截图。
例子:
1 | snap logo to logo.png |
显示输出
echo 信息输出
在命令行上显示输出内容,比如显示变量。
1 | echo [text] |
例子:
1 | echo Flow has started |
show 显示元素文本
在命令行上直接显示元素文本。
可以用 DOM, XPath 进行目标定位。
1 | show [DOM/XPath] |
例子:
1 | show review-text |
check 根据条件显示文本
基于条件显示不同文本信息。
1 | check [条件] | [结果为 true 的文本] | [结果为 false 的文本] |
例子:
1 | check header_home_text equals to "Home" | "header text is correct" | "header text is wrong" |
Custom code 自定义代码
JavaScript
运行 JavaScript 代码。TagUI 直接访问 JavaScript 变量。
TagUI 可以“智能”判断以下 3 种情况使用,无需使用js或js begin/ js finish:
- 分配或改变变量 分配变量时,TagUI 可以检测=符号并自动将该行视为 JavaScript 代码。
- 以 ; 结尾:如果一行以 ; 字符结尾,并且该行无法匹配任何已知的 TagUI 命令,则将其视为 JavaScript 代码。
- 常见的JavaScript关键字开头:如果一行无法匹配任何已知的 TagUI 命令,并且该行以常见的JavaScript 关键字(例如 if、for、switch、else、while、case、break、continue 等)开头,它将自动被视为 JavaScript 代码。
js
,js begin
和js finish
方式使用 -
1 | js 1-line JavaScript code |
1 | js begin |
每当有一些 JavaScript 代码(除了 TagUI 步骤或辅助函数之外的任何代码)时,都需要上面的代码。然而,TagUI 可以“智能”地检测到以下 3 种使用 JavaScript 但js
不需要的情况。
1 | js [JavaScript statement] |
例子:
1 | js obj = JSON.parse(api_result) |
1. 分配或更改变量
当分配变量时,TagUI 可以检测符号=
并自动将该行视为 JavaScript 代码,而无需用户显式使用js
或js begin
/ js finish
。
1 | name = "Johnny" |
2. 以 ; 结尾的行特点
如果一行以;
字符结尾,并且该行无法匹配任何已知的 TagUI 步骤,则将其视为 JavaScript 代码。
1 | // below line quit TagUI |
3. 常用JavaScript关键字
如果一行无法匹配任何已知的 TagUI 步骤,并且该行以常见的 JavaScript 关键字(例如 if、for、switch、else、while、case、break、continue 等)开头,它将自动被视为 JavaScript 代码,而无需使用js
.
1 | for n from 1 to 10 |
Python
运行Python代码并将stdout 保存到变量 py_result
作为字符串。
1 | py [Python statement] |
例子:
1 | py result = 2 + 3 |
有关运行Python代码的更多示例和使用模式查看高级命令
RUN
在命令提示符或终端中运行命令,并将 stdout 保存到变量 run_result
。
1 | run [shell command] |
例子:
1 | run cmd /c mkdir new_directory |
Sikuli
运行 Sikuli 代码,例如需要把OCR设置成中文
1 | vision begin |
例子:
1 | vision click("button1.png") |
DOM
在浏览器 DOM 中运行代码并将返回值保存到变量 dom_result
。
1 | dom [JavaScript statement to run in the DOM] |
例子:
1 | // goes back to previous page |
R
运行 R 语句并将 stdout 保存到变量 r_result
。
1 | r [R statement] |
更多命令
wait 等待
等待一段时间,默认时间单位:秒。
1 | wait [seconds to wait] |
例子:
1 | wait 5.5 |
timeout 设置等待超时
等待 Web 元素出现时,设置自动等待超时(默认为10秒)。
1 | timeout [seconds to wait before timeout] |
例子:
1 | timeout 300 |
ask
提示用户输入,并将用户输入内容保存为变量 ask_result
。
1 | ask [prompt] |
例子:
1 | ask What is the date of the receipt? (in DD-MM-YYYY) |
live
一步步执行命令并立即看到输出。输入 “done” 退出Live模式。
1 | live |
tagui 调用流程
调用另一个 TagUI 流程,注意文件路径别写错。
1 | tagui [flow file] |
例子:
1 | tagui update-forex.tag |
// 添加注释
添加代码注释。在使用条件或循环命令是,注释也要相应缩进,以便在转换为JavaScript代码后正确运行。
1 | // 这里写注释,不会被程序运行 |
例子:
1 | // 点击登录按钮 |
Telegram
Telegram 是国外的一款聊天软件,中国使用人数极少。TagUI 通过发送 telegram 消息,及时获得机器人的工作结果或报错状态信息。国内一般都用 企业微信、钉钉等。
首先要获得 @taguibot 发消息授权,然后再用 TagUI 下面的命令:
1 | telegram [id] [message] |
例子:
1 | // this line sends message to Telegram user with ID 1234567890, \n means a new line |
注意
电报步骤需要互联网连接。此功能托管在https://tebel.org 上,但如果希望在自己的云或服务器上托管此功能,则源代码 位于 GitHub 上。该实现是在纯 PHP 中实现的,没有任何依赖项。
记录的唯一信息是 chat_id、消息长度、日期时间戳(以防止滥用)。如果希望自行托管,请首先阅读此链接以了解有关 Telegram Bot API、创建的 bot API 令牌并设置 webhook 的更多信息 - https://core.telegram.org/bots
Run options 运行流程选项
可以使用 tagui
命令,查看选项说明。
举例:这条命令运行 my_flow.tag
而隐藏Web浏览器,同时把流程运行结果存储到 tagui_report.csv
中。
1 | tagui my_flow.tag -headless -report |
-deploy or -d 生产CMD快捷方式
创建一个可以双击运行流程的快捷方式。如果移动文件,则必须创建一个新的快捷方式。流程将在创建快捷方式时使用的所有选项运行。
-headless or -h 隐藏浏览器
运行时,隐藏 Chrome Web浏览器(隐藏浏览器就无法使用 Visual Automation)。
-nobrowser or -n 不使用Web浏览器
不使用Web浏览器,例如仅使用可视自动化执行自动化。
-report or -r 保存HTML日志
追踪流程运行结果,记录在tagui/src/tagui_report.csv
中,并保存流量执行的HTML日志。
-turbo or -t 十倍速运行
在10倍的速度下运行流程。谨慎使用!
-quiet or -q 减少非主动信息输出
除了 echo, show, check steps and errors etc 之外,不显示其他输出。在执行期间显示和隐藏输出的细粒度控制(例如,隐藏密码显示出来), 可以在流处里使用 quiet_mode = true
和 quiet_mode = false
进行控制。
-edge or -e 使用Edge浏览器
使用 Microsoft Edge浏览器而不是Chrome运行(可与-headless选项一起使用)。
my_datatable.csv
使用指定的CSV文件作为批量自动化的DataTable。查看 datatables 。
input(s) 流程参数
添加自己的流程参数,在的流程中做为变量P1至P8使用。
例如在CMD里,运行 register_attendence.tag
流程,需要用 Edge 浏览器,同时向该流程输入4个变量(4个人名)。
1 | tagui register_attendence.tag -edge Jenny Jason John Joanne |
在流程里, 4个人名会自动分配给4个变量 p1
, p2
, p3
, p4
。例如在需要输入不同数据时,就特别方便,下面的命令会显示出这4个变量,可以试试。
1 | echo `p1` |
辅助函数
csv_row()
以数组方式写入CSV文件。
例子:
1 | read name_element to name |
count() 数量计算
获取符合指定元素特征的元素数,例如计算有多少个新闻标题,然后用for读取它们。请注意,元素特征需要单引号 ''
。
例子:
1 | rows = count('table-rows') |
clipboard() 剪贴板
将文本放在剪贴板上,或获取剪贴板文本。
例子:
1 | clipboard('some text') |
url() 获取当前URL
获取当前网页的URL。
例子:
1 | if url() contains 'success' |
title() 获取当前网页标题。
获取当前网页的标题title。
例子:
1 | if title() contains 'Confirmation' |
text()
获取当前网页的所有文本内容。
例子:
1 | if text() contains 'success' |
timer()
获得一段命令执行的时间周期,时间单位:秒。
例子:
1 | timer() |
exist() 等待元素出现
等待元素出现,如果元素出现返回true
,如果元素等待时间超时,元素还没有出现,就返回 false
,通常在网页搜索、查询等流程时使用本命令,以确定查询结果已经出现后,才继续下面的流程。请注意,元素特征包含在引号 ‘’ 内。
可以使用 DOM, XPath, Image 进行目标定位。
1 | exist('[DOM/XPath/Image]') |
例子:
1 | if exist('//table') |
present() 判断元素是否存在
判断元素是否存在,并且直接返回 true
或 false
。
请注意,元素特征包含在单引号 '
内。
可以使用DOM, XPath, Image 进行目标定位。
例子:
1 | if present('//table') |
mouse_xy()
获取当前鼠标位置的x,y坐标。
适合用在 live mode。
例子:
1 | echo `mouse_xy()` |
mouse_x()
获取当前鼠标位置的 x 坐标。
例子:
1 | hover element.png |
mouse_y()
获取当前鼠标位置的 y 坐标。
例子:
1 | hover element.png |
get_files()
获取文件或文件夹列表,支持相对和绝对路径。Returns an array of files and folders in a given folder. Both relative and absolute paths supported.
例子:
1 | // list of files in the same folder as the flow file |
get_text() 截取文本
从文本中提取2的锚点之间的文本。当有多个匹配结果时的可选第4参数(例如,3判断函数返回找到的第3匹配)。
例子:
1 | pdf_text = 'Name: John State: Texas City: Plano Contact: ...' |
del_chars() 删除文本
删除特征字符后的文本,并返回结果来清除数据。Cleans data by removing provided character(s) from given text and returning the result.
例子:
1 | pdf_text = 'Name: John\n State: Texas\t City: Plano\n Contact: ...' |
get_env() 获得当前用户环境变量
从操作系统返回给定环境变量的值。例如:C:\Users\Administrator
例子:
1 | // getting %USERPROFILE% variable for Windows |
RPA for Python (TagUI 在 Python 里使用)
RPA for Python 是一个 Python 库 (安装方式:pip install rpa
) 这个库可以使用 Python API 来调用 TagUI 执行自动化RPA操作。查看 这里 , RPA for Python 由 TagUI’s creator Ken Soh @kensoh 创建和维护。
TagUI 源代码的和依赖库
可以查看这些源代码,帮助这些项目的迭代及Bug修复,因为这些项目都有大量用户在使用。
- TagUI - https://github.com/kelaberetiv/TagUI
- SikuliX - https://github.com/casperjs/casperjs
- PhantomJS - https://github.com/ariya/phantomjs
- SlimerJS - https://github.com/laurentj/slimerjs
- Python - https://github.com/python/cpython
- R - https://github.com/wch/r-source
- PHP - https://github.com/php/php-src
示例代码块
第一个例子
TagUI 支持运行服务器上的.tag文件,试试直接输入下面命令,会打开百度进行简单点击操作。
1 | tagui http://www.TagUI.com.cn/baidu.tag |
把cmd设置成UTF-8
这样在CMD环境里,echo输出就可以正常显示简体中文。
1 | // 把cmd设置成UTF-8 |
字符串查找替换
字符串替换命令,TagUI字符串处理,请参考 JS 语法
1 | //字符串查找替换 |
查找字符串目标文字位置
,参考JS语法
1 | //查找字符串目标文字位置 |
下载图片
下载图片需要用curl.exe这个命令,百度 curl 具体了解。
1 | // 下载图片 |
download 命令的使用例子
download命令下载视频
1 | https://www.videvo.net/video/apollo-command-and-service-module-separation/8/ |
API 例子
调用有道API翻译,初学者可以看看这里的数组处理方式
1 | // 用API翻译 |
抓取百度首页新闻标题
循环抓取 XPATH 的例子
1 | // 抓取百度首页新闻标题 |
判断目录内是否包含指定扩展名文件
判断目录内是否包含指定扩展名文件,可用于判断下载是否完成
1 | // 判断目录内是否包含指定扩展名文件,可用于判断下载是否完成 |
判断chrome是否下载完成
判断chrome是否下载完成
1 | // 判断chrome是否下载完成 |
读取excel,写入txt
读取excel,写入txt
1 | //读excel |
打开变量里的URL
下面2种方法都可以,推荐用第二种
1 | //打开变量里的URL |
环境初始化
杀死TagUI相关进程,包括chrome,避免上一个tag没完成或卡主,影响当前tag运行
1 | // 环境初始化,杀死TagUI相关进程,包括chrome |
获得本机名
获得本地Windows计算机名
1 | //获得本机名 |
- 标题: TagUI教程
- 作者: Yiuhang Chan
- 创建于 : 2024-04-18 11:39:15
- 更新于 : 2024-04-19 10:52:06
- 链接: https://www.yiuhangblog.com/2024/04/18/20240418TagUI教程/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。