0.脑筋急转弯

请问在什么情况下
log(10) == 10
log(20) == 20

左滑查看答案                                                console.log(10) 是 10
                                                                                                console.log(20) 是 20

1.工具选择

上次的蚂蚁森林能量收取项目中,我们使用了adb对手机进行操作,从而根据计算机的计算结果对能量球位置进行点击。

adb的全称是Android Debug Bridge,即安卓调试工具,在连接安卓设备之后可以查看其设备信息,模拟点击触控等操作。但是其缺点是,需要连接PC设备执行操作命令,且需要打开USB调试功能,根据华为安全中心的提示,打开USB调试功能可能使手机出于风险之中。

所以我们应当谋求一种,可以在安卓设备上独立运行,不需要USB调试功能或者Root权限,操作简单、用户体验良好的操控脚本。实际上早在上次蚂蚁森林能量收取项目中,我们就注意到了Auto.js这种工具,只不过上次的能量收取是当娱乐节目来做的,为了节目效果,采取了一种南辕北辙的方法。

2.Auto.js简介

顾名思义,Auto.js使用JavaScript作为脚本语言,目前使用Rhino 1.7.7.2作为脚本引擎,支持ES5与部分ES6特性。

一切可以用JavaScript实现的,都将用JavaScript实现。使用auto.js不但可以在安卓设备上独立运行脚本,且几乎不需要USB调试和ROOT权限,只需要打开手机上的无障碍服务。

3.安装

auto.js支持我们为所写脚本设计用户界面,甚至可以将界面和脚本内容打包成apk。然而,打包为apk后,会失去脚本语言的灵活性。

因此我们可以下载安装一个auto.js.apk,相当于一个运行平台,然后在上面运行我们临时编写的脚本。

这个安装包在江湖上几近失传,大家可以从我的网盘上下载。

链接:https://pan.baidu.com/s/1S7CL9-ZolyntDr-bOEaWnQ提取码:pj9n


安装好了之后,可以看到,这无非就是一个app。在脚本菜单下,我们可以编写自己的临时脚本,并进行运行。此外附赠了一个悬浮球,这个悬浮球其实非常有用!他可以悬浮于其他应用之上,方便在其他应用上运行脚本,还可以分析其他应用的视图结构。
如上图,我们可以利用悬浮球提供的功能观察微信的界面视图结构,并查看具体控件的信息。

4.基本的auto.js控制命令

auto.js的功能其实十分强大,包括一些http操作、用户界面设计。但我们目前比较关心的是如何通过它对手机进行操控。

auto.js提供基于位置和基于控件两种控制方式。

1)基于控件的控制方式

这种方式非常像JavaScript的DOM操作。首先用一个类似于选择器的方法选中想要操作的控件,再执行相应的如单击、长按、输入等操作。


譬如我们想要点击这个查询按钮,我们查看该控件发现,其id被指定为了iq,因此可以通过id锁定这个控件。可以通过下述代码实现。

var iq = id("iq").findOne();iq.parent().click();

其中id()方法即上述的选择器,用于选中id为iq的控件(元素)。此外还有className() 类名选择器、desc() 文本描述选择器等等。

选择器选中后,可能会有多个控件被选中,这里我们可以执行findOne()方法取回其中一个(注意这里取得的不一定是从上往下看的第一个,其取法遵循DFS的原则),也可以执行find() 方法,取回所有控件。

同时我们注意到,上述分析控件时,iq的clickable属性值为false,这说明这个控件是不可点击的。而真正可点击的是该控件外层的第一个父元素。因此我们通过parent()方法可以获取当前控件的父元素,再执行click方法即可实现点击。

值得注意的是,这里id(),className(),desc()等,都是auto.js定义好的全局函数。定义全局函数往往不是个良好的编程习惯,但在这一特殊的情境下,这些全局函数选择器还是非常好用的。

2)基于位置的控制

基于控件的控制当然最好不过,可迁移性也很出色。但事情往往不尽人意。
对于一些游戏的界面,其布局往往是非常神奇的,展现给我们的只有一个FrameLayout,但里面却包含了许多东西。我们并没有安卓游戏的开发经验,只能猜测这张FrameLayout大致相当于HTML5中的画布,其中可能包含许多更微观的元素,但整体作为一个元素表现出来。这时空间分析的方法就会失效,我们不得不获取截图进行分析,计算出点击位置再通过基于位置的方法进行触控操作。

下面举两个基本的基于位置控制的例子

//点击坐标为(x,y)的位置click(x,y);//从坐标(x1,y1)滑动到(x2,y2),耗时durationhaomiaoswipe(x1,y1,x2,y2,duration);
3)两种方法比较
方法 基于控件 基于位置
场景 一般APP 游戏等APP
优点 迁移性好,分辨率无关 可以基于当前截图分析
缺点 一些特定场景无法分析控件 可能需要考虑分辨率

5.QQ空间秒赞实现

实现秒赞的思路并不复杂,可以通过下面的伪代码实现

while True:    刷新动态  找到第一个点赞按钮if 该点赞按钮未被点赞:      点击该按钮

我们再来分析一下好友动态页面的结构

QQ的见鬼之处就在于,其几乎所有的控件id都是name。这时我们可以通过className和desc两个属性来锁定点赞按钮。

className("ImageView").desc("点赞")

但是由于一些原因,当页面上同时有两个以上点赞按钮时,findOne()方法并不总能找到我们想要的第一个按钮。因此真实的代码应当如下

//获取用于刷新动态的点击区域var dynamic = className("TextView").text("好友动态").findOne().parent().parent();//开始刷新点赞循环while(true){   dynamic.click();//由于上财网速较慢(要多慢有多慢,慢的令人发指……省略三千字)//此处休息两秒等待动态刷新。sleep(2000);//向下滑动一段距离,防止当前页面上没有点赞按钮swipe(200,800,200,200,50);//选择页面上所有的点赞按钮var love = className("ImageView").desc("点赞").find();//对每一个没有点赞的按钮进行点击for(var i = 0; i < love.length; i++){if(!love[i].selected()){            love[i].click();} }}

6.效果图

7.总结

通过安卓脚本的方式,点赞速度的极限可以无限逼近于上财校园网提供的最短刷新时间。
近年来,微信QQ等都推出了python等语言的包,可以实现消息发送等功能,通过这种方法或许能更快的实现点赞等功能。

8.鸣谢

特别感谢何老师每天发各种有趣的QQ动态。

dynamic 365 js 失去焦点_基于Auto.js的QQ好友动态秒赞系统相关推荐

  1. 基于auto.js的QQ好友动态秒赞系统

    0.脑筋急转弯 请问在什么情况下 log(10) == 10 log(20) == 20 1.工具选择 上次的蚂蚁森林能量收取项目中,我们使用了adb对手机进行操作,从而根据计算机的计算结果对能量球位 ...

  2. js微信抢红包脚本代码_基于Auto.js的微信红包监测

    前段时间接触了下Auto.js(https://github.com/hyb1996/Auto.js),很好上手而且挺有意思,于是写了个微信红包监测脚本 大概思路是,不断获取手机屏幕截图,发现新消息则 ...

  3. autojs通知栏_基于Auto.js的蚂蚁森林智能脚本 (长期维护) (JavaScript语言)

    * `新增` 定时循环功能 ·  定时任务自动管理 ·  好友排行榜样本复查 ·  主页能量球循环监测 * `新增` 脚本运行安全 ·  运行失败自动重试 ·  单次运行最大时间限制 ·  排他性任务 ...

  4. python腾讯课堂自动签到_网课终结者——基于auto.js的腾讯课堂,雨课堂等各大网课自动签到以及auto.js新手教程...

    在前两篇文章出后,很多同学网课其他的自动签到怎么搞,其实无论什么软件的自动签到,点击.监视操作之类的都是一类代码,而且非常简单,今天给大家讲一下如何自己编写实用的js脚本. 首先需要下载auto.js ...

  5. 基于auto.js Pro的支付宝蚂蚁森林能量值收集操作代码免费下载分享

    /** @Author: NickHopps* @Last Modified by: NickHopps* @Last Modified time: 2019-03-14 10:29:30* @Des ...

  6. 基于Auto.js的支付宝批量自动转账脚本

    基于Auto.js的支付宝批量自动转账脚本 这是一个能够实现支付宝多账号自动转账脚本,可以自动给多个指定用户自动转账,非商家用户不能申请支付宝的支付Api,另辟蹊径,使用Auto.js模拟手动操作支付 ...

  7. 按键精灵打卡怎么写_钉钉打卡脚本(基于auto.js)开发总结

    关于auto.js 官方对于autojs的介绍如下 "一个支持无障碍服务的Android平台上的JavaScript IDE,其发展目标是JsBox和Workflow.同时有VS Code ...

  8. 微信(基于auto.js)自动打卡脚本

    软件准备 技术理论 安装教程 推荐工作模式 注意事项 附录代码 软件准备 auto.js或者 auto.js pro版.auto.js目前官方已经停止更新,pro版本需要收费.自行百度下载 auto. ...

  9. vue实现卡片式上下滑动_基于Vue.js仿制探探卡片左右滑动特效

    说明 > 最近一直在捣鼓Nuxt.js项目,项目中有个需求是实现类似探探左右滑动切换功能.要求能实现手指拖拽切换.点击按钮进行切换.拖拽回弹等功能. 如上图:最终展示效果 emmm~~ 是不是感 ...

最新文章

  1. CvArr、Mat、CvMat、IplImage、BYTE转换(总结而来)
  2. PHP封装对象名字的思路
  3. 让IT工作者过度劳累的12个坏习惯
  4. 为什么Docker,Vagrant和Ansible等工具比以往更热门
  5. Spring4.x()--注解通知的写法
  6. Maven学习总结(21)——Maven常用的几个核心概念
  7. The type List is not generic; it cannot …
  8. matlab连接github,GitHub - chenboshuo/learn_matlab: 我的matlab学习
  9. 推荐一本学javascript的书籍---经典
  10. 如何点击单选框 radio 后面的文字,选中单选框
  11. 职称计算机 frontpage 2003,计算机职称考试FrontPage2003考试大纲
  12. 字节跳动面试真题:2021新一波程序员跳槽季,系列篇
  13. 前端静态资源缓存最优解以及max-age的陷阱
  14. Hexo-Theme-Sakura 实践记录
  15. 关于子网划分、子网聚合(超网)的研究
  16. 等值连接、自然连接和内连接之间的区别
  17. 网线/双绞线上各标识CAT, AWG, PR, UTP/STP/FTP/SFTP的含义
  18. 【连载】IOS开发-图形渲染(一)
  19. 操作系统-1.设计的原则
  20. php如何实现上一篇下一篇的功能

热门文章

  1. python画图删除上边框和右边框
  2. Halcon学习笔记(一):Qt+Halcon联合开发配置
  3. 吴恩达斯坦福大学机器学习 CS229 课程学习笔记(二)
  4. ecshop api.php,ecshop2.72 api.php 文件鸡肋注入
  5. centos 7 nginx hhvm mysql_CentOS 7 编译安装 HHVM 3.4.1
  6. php的数据模型包括,数据库中模型的分类有哪些
  7. lucene索引MySQL原因_我如何在数据库中存储Lucene索引?
  8. python office库_python库编程.os平台.office平台
  9. JAVAWEB入门之Servlet_体系结构
  10. 数组字典_VBA数组与字典解决方案第34讲:数组的传递