【Autojs教程】03-Autojs 控件学习 | 淘宝关注店铺取消实战

写在前面

本篇教程构思良久,笔者希望通过一个实际的例子,将枯燥无味的函数放到程序中进行讲解,前面一部分是理论教程(还是更加希望大家看下理论的),后半部分是脚本运行教程(有一定基础的可以直接看这一部分)

关注微信公众号获取更多教程信息

开发环境

开发环境搭建笔者在上一篇博文中已有讲解,还没环境的朋友可以参考,传送门:https://blog.csdn.net/xchl123/article/details/109746371

基础知识

选择器

UiSelector即选择器,用于通过各种条件选取屏幕上的控件,再对这些控件进行点击、长按等动作。这里需要先简单介绍一下控件和界面的相关知识。

一般软件的界面是由一个个控件构成的,例如图片部分是一个图片控件(ImageView),文字部分是一个文字控件(TextView);同时,通过各种布局来决定各个控件的位置,例如,线性布局(LinearLayout)里面的控件都是按水平或垂直一次叠放的,列表布局(AbsListView)则是以列表的形式显示控件。

控件有各种属性,包括文本(text), 描述(desc), 类名(className), id等等。我们通常用一个控件的属性来找到这个控件。

我们经常使用的  text('文字').findOne()  就是选择器的一种使用方法

而且,控件不仅仅只有一个属性,以下这些都是可以通过选择器来寻找控件的属性(标红部分是笔者经常使用的选择器属性)

函数 含义解释
className  类名。类名表示一个控件的类型,例如文本控件为"android.widget.TextView", 图片控件为"android.widget.ImageView"等
desc 描述。对一个控件的描述
text 控件文本
id 控件的ID
packageName 包名。包名表示控件所在的应用包名,例如QQ界面的控件的包名为"com.tencent.mobileqq"。
bounds 控件在屏幕上的范围
drawingOrder 控件在父控件的绘制顺序
indexInParent  控件在父控件的位置
clickable 控件是否可点击
longClickable 控件是否可长按
checkable 控件是否可勾选
checked 控件是否已勾选
scrollable  控件是否可滑动
selected 控件是否已选择
editable 控件是否可编辑
visibleToUser 控件是否可见,可以筛选在屏幕可视范围内的组件
enabled 控件是否已启用
depth 控件的布局深度

某些情况下,无法使用单一的属性唯一确定一个控件,这里就需要用到链式调用了,比如  className("ImageView").depth(10).findOne()  这样就可以通过布局深度以及类名确定一个控件了

控件

UiObject表示一个控件,可以通过这个对象获取到控件的属性,也可以对控件进行点击、长按等操作。

获取一个UiObject通常通过选择器的findOne(), findOnce()等函数,也可以通过UiCollection来获取,或者通过UiObject.child(), UiObject.parent()等函数来获取一个控件的子控件或父控件。

觉得下面内容枯燥的可以先跳过下表,等遇到不懂得函数再来看下表即可!

函数 释义 备注
UiObject.click() 点击控件,返回是否成功  
UiObject.longClick() 长按控件,返回是否成功  

UiObject.setText(text)

设置输入框控件的文本内容,并返回是否设置成功

该函数只对可编辑的输入框(editable为true)有效

UiObject.copy()

对输入框文本的选中内容进行复制,并返回是否操作成功

该函数只能用于输入框控件,并且当前输入框控件有选中的文本。可以通过setSelection()函数来设置输入框选中的内容

UiObject.cut()

对输入框文本的选中内容进行剪切,并返回是否操作成功

该函数只能用于输入框控件,并且当前输入框控件有选中的文本。可以通过setSelection()函数来设置输入框选中的内容

UiObject.paste()

对输入框控件进行粘贴操作,把剪贴板内容粘贴到输入框中,并返回是否操作成功

UiObject.setSelection(start, end)

参数

类型

描述

start

{number}

选中内容起始位置

end

{number}

选中内容结束位置(不包括)

对输入框控件设置选中的文字内容,并返回是否操作成功

索引是从0开始计算的;并且,选中内容不包含end位置的字符。例如,如果一个输入框内容为"123456789",要选中"4567"的文字的代码为et.setSelection(3, 7)。

该函数也可以用来设置光标位置,只要参数的end等于start,即可把输入框光标设置在start的位置。例如et.setSelection(1, 1)会把光标设置在第一个字符的后面。

UiObject.scrollForward()

对控件执行向前滑动的操作,并返回是否操作成功。

向前滑动包括了向右和向下滑动。如果一个控件既可以向右滑动和向下滑动,那么执行scrollForward()的行为是未知的(这是因为Android文档没有指出这一点,同时也没有充分的测试可供参考)

UiObject.scrollBackward()

对控件执行向后滑动的操作,并返回是否操作成功。

向后滑动包括了向右和向下滑动。如果一个控件既可以向右滑动和向下滑动,那么执行scrollForward()的行为是未知的(这是因为Android文档没有指出这一点,同时也没有充分的测试可供参考)。

UiObject.select()

对控件执行"选中"操作,并返回是否操作成功。"选中"和isSelected()的属性相关,但该操作十分少用

UiObject.collapse()

对控件执行折叠操作,并返回是否操作成功

UiObject.expand()

对控件执行展开操作,并返回是否操作成功

UiObject.show()

对集合中所有控件执行显示操作,并返回是否全部操作成功

UiObject.scrollUp()

UiObject.scrollDown()

UiObject.scrollLeft()

UiObject.scrollRight()

对集合中所有控件执行向下/下/左/右滑的操作,并返回是否全部操作成功

children()

返回该控件的所有子控件组成的控件集合。可以用于遍历一个控件的子控件

返回类型是UiCollection

childCount()

返回子控件数目

child(i)

参数

类型

描述

i

{number}

子控件索引

返回第i+1个子控件。如果i>=控件数目或者小于0,则抛出异常。

parent()

返回该控件的父控件。如果该控件没有父控件,返回null

bounds()

返回控件在屏幕上的范围,其值是一个Rect对象,Rect对象属性如下:

参数

描述

x1

区域左上角x坐标

y1

区域左上角y坐标

x2

区域右下角x坐标

y2

区域右下角y坐标

boundsInParent()

返回控件在父控件中的范围,其值是一个Rect对象

drawingOrder()

返回控件在父控件中的绘制次序。该函数在安卓7.0及以上才有效,7.0以下版本调用会返回0

id()

获取控件的id,如果一个控件没有id,则返回null

text()

获取控件的文本,如果控件没有文本,返回""

findByText(str)

返回 UiCollection

根据文本text在子控件中递归地寻找并返回文本或描述(desc)包含这段文本str的控件,返回它们组成的集合。

该函数会在当前控件的子控件,孙控件,曾孙控件…中搜索text或desc包含str的控件,并返回它们组合的集合

findOne(selector)

根据选择器selector在该控件的子控件、孙控件…中搜索符合该选择器条件的控件,并返回找到的第一个控件;如果没有找到符合条件的控件则返回null

find(selector)

根据选择器selector在该控件的子控件、孙控件…中搜索符合该选择器条件的控件,并返回它们组合的集合  

项目实战

项目起因

原因1:双十二过后,笔者想要删除淘宝上关注的一些店铺,当时满以为会有批量选择这种按钮给我操作时,我发现,必须得手动一个个删除,我这小暴脾气怎么可能愿意做这种事情,我猿人的精神何在???

PS:我发现京东上是可以批量删除关注店铺的,希望在这点上淘宝能够跟进

原因2:Autojs的教程到了需要讲UiObject、UiSelector以及UICollection的时候了,淘宝这个国民级的APP和它O疼的设计,刚好足够支撑本期教程

原因3:800多个店铺要一个个取关实在是太麻烦了

实战过程

1、分析界面(这里使用Autojs自带的工具哦)

找到"取消关注"和店铺名称的相对位置关系哦,笔者这里是先找"取消关注",后面再去布局层次分析中找到店铺名称控件的(这里需要一些经验)

2、代码编写

有了上面的界面分析过程(其实分析界面是最难的,笔者这里简化了,不同的APP需要大家反复测试)

就容易写出代码了,废话不多说,上代码,笔者这里做了详尽的注释了,

//等待开启无障碍模式
auto.waitFor();
//呼出控制台,用以显示日志信息
console.show();//程序执行函数
start();/*** 主程序执行函数*/
function start() {let getDeviceWidth = device.width; //获取设备的宽度let getDeviceHeight = device.height; //获取设备的高度console.setPosition(getDeviceWidth / 2.8, getDeviceHeight / 100);log('开始执行程序');while (!isInCorrectPage()) {log('当前未在“我的淘宝--关注店铺”页面,请手动前往');sleep(500);}while (isStillHave()) {let w = desc('取消关注').findOne(1000);if (w) {w.parent().click();let diapuName = w.parent().parent().child(0).child(1).child(0).child(0).desc();log('取消关注:' + diapuName + '   成功')sleep(2000);}}log('程序执行结束');
}
/*** 判断当前页面是否在我的淘宝--关注店铺页面*/
function isInCorrectPage() {if (currentPackage() == 'com.taobao.taobao') {let w = desc('店铺').findOne(1000);if (w) {return true;}}return false;
}/*** 判断是否仍有需要取关的店铺*/
function isStillHave() {//这里设置连续三次验证为无“取消关注”的店铺才确定取关完成//降低程序执行的错误概率(加载店铺的时候会出现“取消关注”识别不到的情况)let count = 0;while (count++ < 3) {//在一秒的时间内let w = desc('取消关注').findOne(1000);if (w) {return true;}sleep(1000);}return false;
}

3、代码调试

在编写过程中,大家需要多调试几次,毕竟一次性很难写出完美的代码,借助第二讲说的开发工具,在执行过程中多输出log,很容易发现bug的

4、程序运行

在店铺页面点击Autojs的悬浮球,选择需要运行的脚本即可

运行截图如下

写在最后

由于笔者的水平有限,如果文中出现错误性的描述,还请大家包容,写博客记录这些,不仅仅是记录知识,一定程度上也是在加深本人自己的理解,希望能与各位共同进步~

【Autojs教程】03-Autojs 控件学习 | 淘宝关注店铺取消实战相关推荐

  1. [译][Tkinter 教程10] Text 控件

    已获原作者授权. 原系列地址: Python Tkinter 简介及简例 Text 控件用来显示多行文本. Tkinter 的 Text 控件很强大, 很灵活, 可以实现很多功能. 虽然这个控件的主要 ...

  2. [译][Tkinter 教程02] Message 控件

    已获原作者授权. 原系列地址: Python Tkinter Message 控件 Message 控件用来展示一些文字短消息. Message 和 Label 控件有些类似, 但在展示文字方面比 L ...

  3. CGRidCtrl控件 学习心得

    wuqinxiang0我的:收件箱资源博客空间设置|帮助|退出 首页 业界 移动 云计算 研发 论坛 博客 下载 更多 狂想盼盼 积累点点滴滴 目录视图 摘要视图 订阅 新版论坛系列介绍之二--功能介 ...

  4. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  5. Xamarin XAML语言教程构建ControlTemplate控件模板 (四)

    Xamarin XAML语言教程构建ControlTemplate控件模板 (四) 2.在页面级别中构建控件模板 如果开发者要在页面级别中构建控件模板,首先必须将ResourceDictionary添 ...

  6. Xamarin XAML语言教程构建ControlTemplate控件模板 (三)

    Xamarin XAML语言教程构建ControlTemplate控件模板 (三) (3)打开MainPage.xaml.cs文件,编写代码,实现主题的切换功能.代码如下: using System; ...

  7. Xamarin XAML语言教程构建ControlTemplate控件模板 (二)

    Xamarin XAML语言教程构建ControlTemplate控件模板 (二) (2)打开MainPage.xaml文件,编写代码,将构建的控件模板应用于ContentView中.代码如下: &l ...

  8. Xamarin XAML语言教程构建ControlTemplate控件模板

    Xamarin XAML语言教程构建ControlTemplate控件模板 控件模板ControlTemplate ControlTemplate是从Xamarin.Forms 2.1.0开始被引入的 ...

  9. Xamarin iOS教程之页面控件

    Xamarin iOS教程之页面控件 Xamarin iOS 页面控件 在iPhone手机的主界面中,经常会看到一排小白点,那就是页面控件,如图2.44所示.它是由小白点和滚动视图组成,可以用来控制翻 ...

最新文章

  1. php开发的程序怎么用加密狗加密,C# 简单的程序绑定、加密(类似加密狗)
  2. Linux makefile中的= := ?=操作符
  3. 【Docker】记一次docker container ping domain 和 ping ipv6地址不通问题
  4. Linux驱动入门基础基础知识
  5. 搭建MySQL+MHA服务易错位置
  6. 查看 linux 硬件信息:内存、分区、系统、环境变量、防火墙、路由、端口监听、进程、CPU...
  7. Vue报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  8. 事情没有想象中那么难--JX官网首页3D粒子效果
  9. 远程打开其他电脑的computer management
  10. python中-----数组中的排序
  11. 使用Microsoft Sync Framework做文件同步
  12. 苹果Mac环境如何配置定时任务?
  13. DH 算法思想 SSH解决内容篡改问题
  14. Windows 技巧集
  15. 浏览器 .avi视频播放demo
  16. 一种基于加密域的数字图像水印算法的设计与实现(附Matlab源码)
  17. 如何在Digital Ocean VPS上安装cpanel / whm
  18. linux质控命令,RNA-seq摸索:2.sra下载数据→fastqc质控→hisat2/bowtie2/STAR/salmon比对→Samtools格式转换→IGV可视化结果...
  19. 美味的黄油如果不冷藏,会变质吗?
  20. vue-router(妙味课堂)

热门文章

  1. 转《MCU低功耗设计》
  2. Tap4fun杨祥吉:手游大佬最怕员工知道的那些事儿
  3. 6款办公软件,文案人员常用到
  4. 贪吃蛇的纯C语言实现过程
  5. 电源平面Z阻抗参数的提取是否需要设置VRM,以及Port 参考阻抗对仿真结果的影响
  6. mac php 连接 mssql 2008,php5.3.x连接MSSQLserver2008
  7. 主题美化 —— IAR篇
  8. linux有没有右键解压文件夹,压缩解压文件无需右键可以这样操作
  9. 西安电子科技大学通院811电院821考研上岸经验分享(一)
  10. 200+的AI绘画工具你值得拥有