小D助手最新使用说明
1、工具介绍
1.1、应用场景
- 重复性鼠标键盘操作
- 少儿编程
1.2、界面介绍
1.3、脚本操作介绍
新增脚本后,选择脚本后,鼠标右键出来一个菜单,有如下几种操作
2、脚本操作
2.1、选择区域
2.1.1、简介
- 选择区域操作是全局的,一般在脚本最上面使用,选择区域后,该脚本的所有鼠标操作都是在这个区域里面进行的。选择区域操作可以提升性能,不用每次在整个图片范围内搜索图片,当然针对现在个人电脑普遍配置过剩的情况下,其实也无所谓。
- 如果脚本里不使用选择区域,则所有鼠标操作是在整个屏幕内进行
2.1.2、使用起始图片确定范围
- 使用左上角和右下角两张图片确定一个范围
- 一般用于区域不绝对固定的情况下,也就是操作的区域会移动,比如:使用模拟器运行游戏,用户可能指不定把模拟器拖动屏幕的哪个位置
- 向左偏移表示相对于左上角的图片的左上那个点的位置,向左为正,向右为负,向左偏移后区域的右下同样会向右增大2倍的偏移量
- 向右偏移表示相对于左上角的图片的左上那个点的位置,向上为正,向下为负,向上偏移后区域的右下同样会向下增大2倍的偏移量
- 向左向右偏移一般用在,找不到合适的左上和右下的标志性的图片,则使用附近的图片加上偏移来确定范围
2.1.3、直接框选确定范围
直接框选常常用于操作的区域位置固定的情况下
2.2、鼠标操作
2.2.1、简介
鼠标操作有如下几种
- 单击鼠标左键
- 双击鼠标左键
- 单击鼠标右键
- 鼠标移动
- 鼠标拖动
- 鼠标滚轮滚动
所有鼠标操作都可以基于图片定位鼠标操作的位置,也可以直接基于绝对坐标定位位置
- 如果有选择图片,则向右偏移、向下偏移都是针对图片中心点的偏移
- 如果没有选择图片,则向右偏移、向下偏移都是针对屏幕左上角的原点进行的偏移
注意:每个操作新增后,右侧的配置详情界面都有一个保存,配置后一定要记得保存,不然不生效
前四个鼠标操作都有三种点击目标:图片、文字和相对位置,如下
2.2.2、单击鼠标左键
2.2.2.1、点击图片
如果选择图片:基于图片加上偏移去点击,如果不选择图片,则基于电脑屏幕左上角为(0,0)点做偏移点击
2.2.2.2、点击文字
如果选择图片:基于图片和偏移,确定文字识别范围的左上角的点,加上宽度和高度确定文字识别的整体范围,如果不选择图片,则基于屏幕左上角的点加上宽高确定文字识别范围
2.2.2.3、点击相对位置
如果选择相对位置:基于当前鼠标所在的位置加上偏移确定最终要操作的鼠标位置
2.2.3、双击鼠标左键
双击鼠标左键同单击鼠标左键配置完全一样,只是一个做鼠标单击,一个做鼠标双击
2.2.4、单击鼠标右键
单击鼠标右键同单击鼠标左键配置完全一样,只是一个做鼠标左键单击,一个做鼠标右键单击
2.2.5、鼠标移动
鼠标移动同单击鼠标左键配置完全一样,只是一个做鼠标左键单击,一个只移动过去但是不点击
2.2.6、鼠标拖动
鼠标拖动就是按照鼠标左键进行移动,上半部分配置同单击鼠标左键点击图片的配置完全一样,下半部分体现拖动的距离和方向
2.2.7、鼠标滚动
鼠标滚动上面配置和点击鼠标的点击图片目标是一致的,下面部分确定滚动的方向和滚动强度,其中滚动方向是滚动的目标内容向上或者向下移动,滚动强度是每次移动的强度大小
2.3、键盘操作
2.3.1、简介
键盘操作分为快捷键和文字输入两个操作
2.3.2、快捷键操作
快捷键就是平时使用的那些快捷键,比如ctrl + c、ctrl + v表示复制粘贴,多个按键使用英文逗号分隔就行了,如下win + r打开运行窗口
2.3.3、输入文字
输入文字,还可以用后面会介绍的变量
2.3.4、案例:打开记事本写"hello广州"
整个流程:打开运行窗口->输入notepad命令->回车确认->等待1s弹出记事本->输入文字"hello广州"
2.4、等待操作
2.4.1、简介
等待操作有如下5种
- 时间等待
- 定时等待
- 等待图片
- 等待文字
- 全局等待
2.4.2、等待时间
等待指定时间间隔,单位秒,可以使用小数,时间可以使用范围,如1-3秒最终等待时长就是随机取大于等于1小于等于3的一个时长
2.4.3、定时等待
可以通过定时等待,等待到指定的时间
2.4.4、等待图片
通过截图工具选择需要等待的图片,可以选择等待图片出现或者消失,也就是图片存在或者不存在,同时可以指定最多等待的时长,时长单位秒,可以使用小数
2.4.5、等待文字
等待文字的出现或者消失,这里先选择图片和偏移是为了确定文字识别范围的左上角的点,然后指定宽度和高度确定最终文字识别的具体区域,如果不选择图片定位,只指定偏移,则会以屏幕左上角作为文字识别的左上角的点结合宽高确定最终文字识别的区域
2.4.6、全局等待
如果我们整个脚本或者脚本中某些部分都需要在具体操作后加上时间等待,等一小段时间,我们可以直接在最上面加一个全局等待操作,这样之后所有的操作都会自动等待指定的时长,这样简化脚本配置。
2.5、变量操作
2.5.1、简介
变量就是可以改变的数据,变量操作有4种,设置变量、修改变量、文字识别和变量提取。
2.5.2、设置变量
如上配置,设置了变量n,初始值为0,这种变量的值只能是整数
2.5.3、修改变量
如上配置,将n的值加1
2.5.4、文字识别
文字识别首先通过图片、偏移和宽高确定文字识别的区域范围,然后可以选择指定识别文字之后的分隔符,比如识别到文字为:"广州,中国",指定分隔符为:",",分隔后取第1个,保存变量填"city",则运行之后结果为初始化了一个变量:"city",变量值为:"广州"
2.5.5、变量提取
由于文字识别,识别后的文字格式多种多样,自带只有按照分隔符分隔获取文字,这里为了丰富获取文字的方式,才有了变量提取操作。变量提取就是将文字识别之后的文字按照分隔符、固定长度截取和正则提取3中方式提取出自己想要的文字然后保存在变量中。
2.5.5.1、分隔符提取
这里和文字识别那里一样,比如先使用文字识别直接将识别到的文字保存到变量:"content"中
然后再使用变量提取,将上面识别到的content变量"广州,中国",按照分隔符:","分隔后,取第一个也就是"广州",保存在变量:"city"中,后续操作中就可以正常使用到整个city变量了
2.5.5.2、固定截取
同样,content变量内容为:"广州,中国",我们也可以使用固定长度截取拿到city,如下:
2.5.5.3、正则提取
我们可以使用正则表达式提取,比如:提取内容:"123aaa456",提取内容中的第一个数值
2.5.4、变量作用域
说人话:一个变量设置之后在哪些范围内可以使用到
结论:变量作用范围为:新产生变量操作(设置变量、文字识别和变量提取操作)之后的(同级操作节点和同级节点的子孙节点)
2.6、日志输出
可以使用英文大括号来使用变量,如{n}表示显示n的值
注意:有一个代表当前时间的内置变量curr_date,使用如下
2.7、条件判断
2.7.1、简介
条件判断就是判断某个或者某些条件满足之后才执行条件判断节点里面的操作,需要注意的是之前学到的所有操作都是从上到下按顺序执行下来的,在程序中属于顺序执行,这里的条件判断只有满足条件才执行条件节点的子孙节点,在程序中属于条件分支执行,也就是可以有很多条件判断,满足不同的条件执行不同的操作。
条件判断操作的有4种方式
- 图片判断
- 整数判断
- 文字判断
- 按键判断
条件判断操作里面可以放除了选择区域之外的所有操作,当然也可以放条件判断自己(条件嵌套)
2.7.2、图片判断
判断图片存在或者不存在,如果存在就执行条件操作里面的子操作
2.7.3、整数判断
整数判断是判断整数变量是否符合,如果符合就执行条件操作里面的子操作
2.7.4、文字判断
文字判断可以判断文字识别之后的文字,是否符合要求,如果符合要求则执行条件判断操作里的子操作
2.7.5、按键判断
按键判断可以判断键盘中的指定按键按下或者松开,按键名称为:键盘上标识的英文或者数字的小写形式,如删除键为:"delete",回车键为:"enter"
注意:按键按下和按键松开的区别在于,按键按下是一个持续的动作,可以按几秒才松开,这时候如果在循环中使用按键按下判断,可能在一段时间这个条件一直是满足的,但是如果使用按键松开判断,则只会等待按键先按下然后再松开之后条件才满足
2.8、循环执行
2.8.1、简介
循环执行见名知意,将同一个或者多个操作重复执行,比如一段操作:点击A、点击B、点击C,加上循环执行10次后,就会一直按顺序点击A、B、C重复十次,就像我们每天起床、刷牙、吃早餐、工作、下班、吃晚饭、睡觉、每天都重复这些动作直到生命结束。
循环操作操作里面可以放除了选择区域之外的所有操作,当然也可以放循环操作自己(嵌套循环)
循环操作有两种:
- 循环执行
- 跳出循环
2.8.2、案例:按顺序点击三个图标,重复三次
2.8.3、案例:按顺序点击三个图标,重复三次,第二次跳出循环
如上配置,首先初始化一个变量N为0,然后循环执行3次,每一轮循环先给N加1,再点击A、B、C,判断当前N等于2,就跳出循环,实际上最终结果依次点击A、B、C,重复了2次
2.9、乱序执行
2.9.1、简介
在某些特殊场景下,我们需要操作不按照特定顺序执行,就需要使用乱序执行操作,乱序执行操作每次执行时会将其下的直接子节点随机打乱顺序执行
注意:乱序执行新增操作新增之后只需要将需要乱序的操作放在其中即可,不需要其它配置
2.9.2、案例:乱序打印1、2、3
如下:多次执行如下
2.10、调用脚本
2.10.1、简介
有时候我们需要在新脚本里的某个地方直接调用现有的脚本,被调用的脚本可以直接共享使用当前脚本的变量
2.10.2、调用脚本
先准备一个被调用的脚本
这个时候,因为没有设置变量n,所以单独运行这个脚本打印的n肯定是空,执行如下:
再配置一个调用脚本
如上,使用调用脚本操作,选择调用之前准备的“被调用脚本”,然后执行”调用脚本操作“如下
可以看出,调用脚本的变量可以传递给被调用脚本
3、迁移学习(可选)
知识点 |
小D助手 |
Java |
Python |
变量 |
变量操作/设置变量 |
int n = 0 |
n = 0 |
变量作用域 |
节点之后的同级节点和同级节点的子孙节点 |
变量声明所在的{}之内 |
函数、类里面 |
方法/函数 |
脚本/新增脚本 |
public int add(int x,int y) { return x + y } |
def add(x,y): return x + y |
方法函数调用 |
调用脚本操作 |
add(1,2) |
add(1,2) |
方法函数调用传参 |
调用脚本操作直接共享当前脚本的所有作用范围内的变量 |
add(1,2) |
add(1,2) |
顺序执行 |
同级节点按顺序执行 |
不同行的代码按顺序执行 |
不同行的代码按顺序执行 |
条件分支 |
条件判断操作 |
if(n == 2) { doThings(); } |
if n == 2 do_things();
|
条件嵌套 |
条件判断操作 条件判断操作 |
if(n == 2) { if(m == 2){ doThings(); } } |
if n == 2 if m == 2 do_things(); |
循环语句 |
循环执行操作 |
int n = 0 while(n < 10) { doThings(); n++; } |
n = 0 while n< 10: do_things() n += 1 |
跳出循环 |
跳出循环操作 |
int n = 0 while(n < 10) { if(n == 5) { break; } doThings(); n++; } |
n = 0 while n< 10: if n== 5: break do_things() n += 1 |
循环嵌套 |
循环执行操作 循环执行操作 |
int n = 0 int m = 0 while(n < 10) { while(m < 10) { doThings(); m++; } n++; } |
n = 0 m = 0 while n< 10: while m< 10: do_things() m += 1 n += 1 |
时间等待 |
时间等待操作 |
Thread.sleep(1000) |
time.sleep(1) |