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

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

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

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

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

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

1)基于控件的控制方式

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

38bab350aeb8456c59707fa9392200cd.png
譬如我们想要点击这个查询按钮,我们查看该控件发现,其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)基于位置的控制

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

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

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

5.QQ空间秒赞实现

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

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

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

a6782f7ff0b38099aac5d131c2f4f5f2.pngQQ的见鬼之处就在于,其几乎所有的控件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.效果图

0a749e0ca8b48583f6699f7743a24e47.gif

7.总结

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

8.鸣谢

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scrapy框架_Python:Scrapy框架

“ Scrapy是一个适用爬取网站数据、提取结构性数据的应用程序框架&#xff0c;它可以应用在广泛领域&#xff1a;Scrapy 常应用在包括数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。通常我们可以很简单的通过 Scrapy 框架实现一个爬虫&#xff0c;抓取指定网站…

python求两数之和的命令_数学建模:科学计算Python2小时-Python基础

这一部分主要面向数模活动中的python基础知识进行讨论作者系列文章(科学计算Python2小时)目录&#xff1a;李似&#xff1a;科学计算Python2小时-前言与目录​zhuanlan.zhihu.com首先要说明的是&#xff0c;目前常用的Python版本包括Python2和Python3&#xff0c;二者有一些语法…

空白世界地图打印版_洪恩识字卡1300字十字帖+绘本,可打印成册

洪恩识字卡电子版资源&#xff0c;共1300字&#xff0c;无拼音和升级版带拼音都有&#xff0c;可直接打印&#xff0c;可分享免费送我在app中无意洪恩识字这个宝藏app&#xff0c;识字是想着孩子能早日实现自由阅读&#xff0c;可是一直对着电子设备伤眼晴&#xff0c;于是找了…

操作系统实验读者写者程序源码_SAST Weekly | STM32F103系列开发板移植华为LiteOS操作系统...

SAST weekly 是由电子工程系学生科协推出的科技系列推送&#xff0c;内容涵盖信息领域技术科普、研究前沿热点介绍、科技新闻跟进探索等多个方面&#xff0c;帮助同学们增长姿势&#xff0c;开拓眼界&#xff0c;每周更新&#xff0c;欢迎关注&#xff01;欢迎愿意分享知识的同…

java 远程调试spark_spark开启远程调试

一.集群环境配置#调试Master&#xff0c;在master节点的spark-env.sh中添加SPARK_MASTER_OPTS变量export SPARK_MASTER_OPTS"-Xdebug -Xrunjdwp:transportdt_socket,servery,suspendy,address10000"#调试Worker&#xff0c;在worker节点的spark-env.sh中添加SPARK_WO…

web中间件_常见web中间件拿shell

1.weblogic后台页面&#xff1a;(http为7001&#xff0c;https为7002)Google关键字&#xff1a;WebLogic Server AdministrationConsole inurl:console默认的用户名密码1、用户名密码均为&#xff1a;weblogic2、用户名密码均为&#xff1a;system3、用户名密码均为&#xff1a…

java定义抽象类abarea_详解 抽象类

本人在这篇博文中要讲解的知识点&#xff0c;和本人之前的一篇博文有所关联。因为&#xff0c;“抽象类” 是按照 “自下而上” 的顺序来编写所需的类&#xff0c;而在本人之前的博文《详解 继承(上)—— 工具的抽象与分层》中讲到的 继承 则与之相反&#xff0c;按照 “自上而…

word表格图片自动适应表格大小_Excel应用实践20:使用Excel中的数据自动填写Word表格...

学习Excel技术&#xff0c;关注微信公众号&#xff1a;excelperfect我在Excel工作表中存放着数据&#xff0c;如下图1所示。图1我想将这些数据逐行自动输入到Word文档的表格中并分别自动保存&#xff0c;Word文档表格如下图2所示&#xff0c;文档名为“datafromexcel.docx”。图…

dnspod java_使用dnspod遭遇的奇特问题以及背后的原因与临时解决方法

由于园子里有不少用户在使用dnspod&#xff0c;我们觉得有必要将这两天blogjava.net域名在dsnpod遇到的奇特问题分享一下&#xff0c;以免再有人踩着这个坑。12月11日&#xff0c;我们登录到dnspod的后台时&#xff0c;大吃一惊&#xff0c;blogjava.net这个域名竟然消失了。联…

cad转dxf格式文件太大_想知道DWG、DWT、DWS和DXF是什么吗?从了解4种CAD图形格式开始吧...

原创&#xff1a;就说我在开发区常用图形文件格式盘点CAD中的图形文件格式共9种&#xff0c;其扩展名分别为&#xff1a;❶DWG – 图形或块文件❷DWT – 图形样板文件❸DWS – 图形标准文件❹DXF – 图形交换文件(ASCII 或二进制)❺DST – 图形集或图纸集文件(SHEETSET 命令)❻…

vue登录如何存储cookie_vue项目实现表单登录页保存账号和密码到cookie功能

实现功能&#xff1a;1.一周内自动登录勾选时&#xff0c;将账号和密码保存到cookie&#xff0c;下次登陆自动显示到表单内2.点击忘记密码则清空之前保存到cookie的值&#xff0c;下次登陆需要手动输入次要的就不说了直接上主要的代码html部分登陆帮助一周内自动登录忘记密码&a…

usb协议规范_USB连接标准接口简述发布

制程工艺材料类USB为Universal Series Bus (通用序列总线)的缩写,是一种串行通讯协议(sereal protocol),它负责实体层和链接层的建立。它可以支持慢速的数据传输(如鼠标、键盘、游戏摇杆等)也支持快速的数字压缩影音信息。普通的USB2.0版本以下有两对线&#xff0c;分别用来传输…

java urlencode php_PHP如何使用urlencode()函数进行url编码?(代码示例)

urlencode()函数是PHP中的一个内置函数&#xff0c;用于对url进行编码。下面本篇文章就来给大家介绍一些urlencode()函数的用法&#xff0c;让大家了解urlencode()函数是如何对url进行编码的&#xff0c;希望对大家有所帮助。【视频教程推荐&#xff1a;PHP教程】urlencode()函…

光电转换模块_光模块:PIN光电二极管和APD光电二极管

在前面的文章中我们介绍了光模块的基本结构&#xff0c;包括TOSA、ROSA以及BOSA。今天我们接着介绍ROSA光器件的光电探测器。光模块接收端能正确识别信号并完成光电转换&#xff0c;就需要光电探测器&#xff0c;光电探测器通过检测出照射在其上面的光功率&#xff0c;从而并完…

java如何添加自定义的图片_java代码将图片加上自定义水印 -4

java代码将图片加上自定义水印&#xff0c;然后生成了新的图片import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.Image;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileOutputStream;import javax.image…

vba 当前文件名_值得学习和珍藏的VBA常用编程代码语句

分享成果&#xff0c;随喜真能量。大家好&#xff0c;今天继续和大家分享VBA编程中常用的过程代码。过程代码在这里讲解的语句非常简单单一&#xff0c;简单的语句组合起来就是一个复杂的过程&#xff0c;我们要认真掌握这些简单的过程&#xff0c;为我们复杂的工程服务。这也是…

java上传csv错误信息_java处理csv文件上传示例详解

前言&#xff1a;示例只是做了一个最最基础的上传csv的示例&#xff0c;如果要引用到代码中去&#xff0c;还需要根据自己的业务自行添加一些逻辑处理。ReadCsvUtil工具类package com.hanfengyeqiao.gjb.utils;import java.io.*;import java.util.*;/*** csv工具类*/public cla…

暗金色 rgb_杜伽TAURUS K310樱桃RGB红轴体验:做工精良、手感优秀

前言DURGOD杜伽的机械键盘一直以简约的外形和优秀的手感而备受好评。笔者之前用过杜伽的K310、K320两个系列的多把键盘&#xff0c;对其非常熟悉&#xff0c;外形简约大方&#xff0c;手感、灯效也比较满意。正因如此&#xff0c;这次刚刚入手了一把杜伽K310 RGB樱桃红轴&#…

vim 显示行号_Vim给文件加行号,这通惊为天人的操作没sei了!文末天书慎点

引言一般 Vim 使用 :set number 命令&#xff0c;在编辑器显示行号。本文展示了如何将行号插入到正文中&#xff0c;或者只插入到段落中。此外&#xff0c;还提供了打印行号的选项(Vim 可以打印带有数字的行&#xff0c;并且不需要文件有数字)。Vim可以使用 :s 命令在每行之前插…

java 获取对象方法有哪些方法有哪些方法有哪些_Java中创建String 对象的方法有哪些...

Java中创建String 对象的方法有哪些发布时间&#xff1a;2020-11-25 16:45:30来源&#xff1a;亿速云阅读&#xff1a;71作者&#xff1a;Leah这篇文章将为大家详细讲解有关Java中创建String 对象的方法有哪些&#xff0c;文章内容质量较高&#xff0c;因此小编分享给大家做个参…