对UiBot Creator目标选择器的研究
Creator 版本6.0.1
2024/1/8 在最新的文档中介绍了对目标的选择和目标选择器的使用
https://documents.laiye.com/rpa-guide/docs/DevGuideD1/Chapt3-Target
直接用命令里的获取目标
只适合目标的名称不会变化的. 如果目标的名称会变, 就只能用目标选择器去拆解目标.
按官方文章给出的方法, 可变目标名称一个是将aaname
改为*
, 但会增加错选的概率. 另一个是通过目标选择器(UI分析器)选择上级的不变目标, 再用获取子元素的命令获取子元素, 再从子元素中找到想要的目标.
Creator 研究版本: 5.5.0
对Chrome浏览器的选择
以鼠标点击目标
为例,
一个典型的选择器
{
wnd: [
{ cls: "Chrome_WidgetWin_1", title: "*", app: "chrome" },
{ cls: "Chrome_RenderWidgetHostHWND", title: "Chrome Legacy Window" },
],
html: [{ tag: "SPAN", parentid: "body", aaname: "idarc", idx: 0 }],
}
wnd
应为window
的缩写, 对于Chrome的窗口的选择代码死树是固定的.
html
因为对具体页面的选择.
tag
: 为选择文本的标签名
parentid
: 上级中最近一个有id的标签的id. 这儿正好是body, 但不是指body标签.
aaname
: 标签内的文字. 不加通配符是需要精确匹配的. 另外试过是支持*
和?
通配符, 用法和正则一样. 其他正则符号似乎就不支持了.
idx
: index的简称, 在parentid的标签内可能有出现了多个tag, 其中的文字也是相同的, 这个idx是第几个的意思. 从0开始计数.
如果tag能定位, 则不需要parentid, 其他的键也类似.
点击table内的一个单元格
html: [
{ tag: "TABLE", parentid: "J_Reviews" },
{ tag: "TD", tableRow: "2", tableCol: "3" },
]
html数组中的值是依次缩小搜索范围的.
定位某一个单元格TD, 出现了两个新的键名: tableRow
和tableCol
, 分别是行数和列数. 这儿注意, 行数和列数是从1
开始数的.
点击一个图片
html: [
{
tag: "IMG",
parentid: "J_Reviews",
"css-selector":
"body>div>div>div>div>div>div>div>div>div>div>table>tbody>tr>td>div>div>div>ul>li>img",
src:
"//img.alicdn.com/bao/uploaded/i4/O1CN012qd0b21L8NLDRJi8f_!!0-rat*",
},
]
这儿出现了另两个新键名:
css-selector
: css选择器. 但是这个里面没有出现id和class的选择器. 试了一下, class选择器.
似乎是不支持的.
src
: 可以写入src. 其中似乎可以使用*
通配符.
内嵌与chrome中的目标选择器JSON生成工具
参考: https://zhuanlan.zhihu.com/p/90916040?from_voters_page=true
位置在F12->Elements
,然后点击中间Styles
菜单行最后的>>
,选择UiBot
.
用Chrome自己的选择器选择目标后, 再点击Uibot
中的生成选择器
或生成选择器(CSS selector)
生成选择器JSON代码.
普通选择器样式:
{
"html": {
"tagName": "P",
"attrMap": {
"tag": "P",
"isleaf": "1"
},
"index": 24
},
"wnd": [
{
"app": "chrome",
"cls": "Chrome_WidgetWin_1",
"title": "*"
},
{
"cls": "Chrome_RenderWidgetHostHWND",
"title": "Chrome Legacy Window"
}
]
}
CSS选择器样式:
{
"html": {
"tagName": "p",
"attrMap": {
"css-selector": "body>div>div>main>div>article>div>div>p"
},
"index": 34
},
"wnd": [
{
"app": "chrome",
"cls": "Chrome_WidgetWin_1",
"title": "*"
},
{
"cls": "Chrome_RenderWidgetHostHWND",
"title": "Chrome Legacy Window"
}
]
}