hello,大家好,我是帅气的超级饭饭团,最近刚和大舅子约了个晚饭,饭桌上大舅子第一句话便是:

听说你是程序员?可以帮我写个自动化脚本吗?

我发现外行人都觉得程序员是万能的啊,但是其实我们都只是会ctrl c + ctrl v而已

不过,大舅子提需求了,能认怂吗?

当然不能啊,必须做啊

虽然我连自动化脚本怎么做、用什么语言都不知道,但是,为了妹子,不能怂啊

我喝了一两白酒,壮了壮胆子,和大舅子讨论了下需求

酒过三巡菜过五味,最后终于将需求定了下来了

大概是这样的:

  • 自动登录某app

  • 自动搜索指定宝贝

  • 自动评论留言

  • 自定义搜索关键词、自定义留言个数

总结下来就是根据关键词自动评论,然后还要提供一个UI操作

确定了需求了,加上白红啤怼了几杯后,我反问大舅子那你妹就是我的了吧

大舅子说:需求搞出来,她就是你的了

为了妹子,必须拼啊,当晚开始奋斗

先是搜索相关技术,然后开始查漏补缺,最后便是开始实现

给大家看看需要的技术:

  • autojs,自动化脚本引擎

  • 一点js编程意识,实现语言用的就是js

  • 一点安卓意识,毕竟自动化脚本针对的对象就是安卓手机了

最后给大家看看我奋笔疾书一整晚的效果

大概分为几步:

第一步,UI界面的设计

ui.layout(<vertical><text textSize="18sp" textColor="#000000" margin="20" textStyle="bold">闲鱼自动评论</text><ScrollView><vertical><text textSize="16sp" margin="8">1.宝贝标签</text><input w="*" text="卫衣" id="target" margin="0 16" /><text textSize="16sp" margin="8">2. 评论内容</text><input w="*" text="你好" id="comment" margin="0 16" /><text textSize="16sp" margin="8">3. 总处理条数</text><input text="2" id="total" inputType="number" margin="0 16" /><linear gravity="center"><button margin="16" id="ok">开始执行</button></linear></vertical></ScrollView></vertical>
)

最终呈现出来的界面是这样的

虽然丑,但是能用就可以啦

第二步便是点击后的处理

ui.ok.click(() => {var target = ui.target.text();var comment = ui.comment.text();var total = ui.total.text();let main = new Main();threads.start(function () {main.process(target, comment, total);});
});

也就是监听了按钮的点击处理

第三步就是真正做自动化的地方了

let utils = new AppUtils();utils.consoleShow();console.log("处理的参数:" + target + "," + message + "," + limit);let mainTarget;auto.waitFor();utils.openApp("闲鱼");let search = id("search_bar_layout").untilFind();utils.clickView(search[0]);let sousuoInputs = className("android.widget.EditText").indexInParent(1).depth(6).untilFind()sousuoInputs[0].setText(target)utils.paste(sousuoInputs[0], target);utils.sleep(1000);let results = className("android.view.View").descContains(target).untilFind();utils.clickView(results[0]);mainTarget = results[0].desc();console.log("设置标签:" + mainTarget);var targetViewMap = new java.util.HashMap();while (targetViewMap.size() < limit) {let viewIndex = 0;while (true) {let targetViews = className("android.view.View").descContains(target).untilFind().filter(function (w) {return w.desc().length >= 10;});if (targetViews.length <= viewIndex) {break;}let targetView = targetViews[viewIndex++];let text = targetView.desc();text = text.substring(0, Math.min(10, text.length));if (!targetViewMap.containsKey(text)) {utils.sleep(1000);utils.clickView(targetView);utils.sleep(1000);if (textContains("客服").findOnce() != null) {utils.tryback(mainTarget);continue;}let btns = className("android.view.View").untilFind()var leaveMessage;for (key in btns) {let btn = btns[key]try {if (btn.desc() == null) {continue;}if (btn.desc() == "留言") {leaveMessage = btn;break;}if (!isNaN(btn.desc())) {leaveMessage = btn;break;}} catch (error) {}}utils.clickView(leaveMessage);utils.sleep(1000);try{leaveMessage.setText(message)} catch(error) {}try {let leaveMessage2 = descContains("看对眼就留言").findOnce();utils.clickView(leaveMessage2);utils.sleep(1000);leaveMessage2.setText(message)} catch (error) {}try {let leaveMessage3 = textContains("看对眼就留言").findOnce();utils.clickView(leaveMessage3);utils.sleep(1000);leaveMessage3.setText(message)} catch (error) {}utils.sleep(1000);let sendBtn = textContains("发送").findOnce();if (sendBtn == null) {console.warn("找不到发送按钮:" + text)continue;}utils.clickView(sendBtn);console.log("评论成功,避免被监控,停止1秒")utils.tryback(mainTarget);utils.sleep(3000);targetViewMap.put(text, targetView);console.log("当前成功评论个数:" + targetViewMap.size())if (targetViewMap.size() >= limit) {break;}}}while (true) {if (scrollDown(0)) {break;}}}console.log("执行完毕");

可以看到第3步挺多sleep的地方,都是为了等待界面渲染的时间,因为手机比较卡,所以等待的时间也相对长了些。

最后将脚本打包后发给了大舅子,大舅子喜出望外.......

当然啦,大舅子开心,我也开心,毕竟抱得妹子归啊哈哈哈哈

另外,我将自动化学习教程和实战例子都放到github和码云上了,有兴趣学习的可以拿去看

github地址:https://github.com/wiatingpub/autojs/

码云地址:https://gitee.com/xi_fan/autojs

另外,该系列也录制了视频,有兴趣的可以点击: https://www.bilibili.com/video/BV1a3411873D/

有兴趣学习外挂开发的可以持续关注我,后面会手把手为大家带来开发教程。

为了讨好大舅子,程序员竟当场学起了外挂???相关推荐

  1. java程序员入门先学什么开发者工具

    学习java编程语言,那么开发工具是肯定少不了的,程序员入门基础中开发工具是一定要学会的,可以帮助开发者们提高开发效率.更优雅的写代码.由于开发者涉及的技术领域众多,以后端开发者的视角盘点平时可能用得 ...

  2. 数据结构 python的书推荐-为什么程序员一定要学数据结构?数据结构书单推荐~...

    原标题:为什么程序员一定要学数据结构?数据结构书单推荐~ 来自:程序员书库(ID:OpenSourceTop) 人们最初使用计算机是用来处理简单的数值计算问题,当你使用计算机来处理一个问题时,一般经过 ...

  3. erp开发和java开发区别_Java程序员求职必学:Spring boot学习指南!

    黑马程序员上海中心 学姐微信:CZBKSH 关注 咳咳,今天学姐就来和你们说说Spring对于Java程序员的重要性. 首先,Spring 官网首页是这么介绍自己的--"Spring: th ...

  4. 程序员为什么要学算法?

    "程序员必须会算法 ?" 程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点. 很多人觉得像人工智能.数据搜索与挖掘这样高薪的工作才用得上算 ...

  5. 程序员到底应该学什么?!

    以前听别人说大公司和小公司在招牌上的差异,自己总是不信,总是沿着自己设计的路一直走,直到碰壁了,才终于醒悟!所以在此以一个过来人的身份再说:大公司和小公司在招聘上的差异,程序员到底应该学什么!可能没有 ...

  6. 不写情书,程序员为什么还要学写作?

    跟小伙伴们一样,老兵哥也年轻过,在花季雨季也写过情书,不过经常石沉大海.当时特别希望自己的文笔好一些,像小说影视作品中的男猪脚那样一封书信就可以俘获菇凉的芳心.现今娃娃都能打酱油了,原来情书的效用早就 ...

  7. 36岁转行学java_年纪大了还想转行当程序员,现在学java还来得及吗

    现在流行这样一种论调:说程序员就是吃青春饭的,年纪大了就不要再转行当java程序员了.可是仍然还有许多人前赴后继的想来学java当程序员,但是心里面有隐约担心:年纪也不小的,快30了还能学java吗? ...

  8. 学了go语言再学java容易吗_年纪大了还想转行当程序员,现在学java还来得及吗-Go语言中文社区...

    现在流行这样一种论调:说程序员就是吃青春饭的,年纪大了就不要再转行当java程序员了.可是仍然还有许多人前赴后继的想来学java当程序员,但是心里面有隐约担心:年纪也不小的,快30了还能学java吗? ...

  9. Google大佬自述:天才程序员竟也有不为人知的秘密,看完真的学到了!

    缘起 最近在YouTube里看了一条谷歌大佬的公开演讲,题目叫做The Myth of the Genius Programmer,翻译过来就是天才程序员的秘密.这篇演讲是两位在谷歌subversio ...

  10. 【程序员跳槽】学弟被高薪挖走不到一年就后悔的无奈经历,到底是老板的水深?还是学弟太年轻?

    01 我的学弟,最近向我吐槽,2020 年下半年入职一家公司,当时是高薪挖走的他,所谓钱到位,工作也是充满干劲,不到一年的时间,参与了不少项目. 可是疲于应对工作,填了不少的技术"坑&quo ...

最新文章

  1. c语言合法常量2.57e03,[单选] 目前杭州共有世界遗产()项。
  2. 学习opengl(起步)
  3. 人生应该记住的16句话
  4. 张高兴的 .NET Core IoT 入门指南:环境配置、Blink、部署
  5. e3是合法浮点数吗_下列哪些是不合法的浮点数的选项是 123 2e4.2 .e5 -e3 .234 1e3
  6. python 下的数据结构与算法---6:6大排序算法
  7. C++笔记-设置cout输出数据的宽度和填充
  8. 如何关闭文件服务器的同步,文件服务器同步
  9. 数据分析基本思路及手法
  10. python gdbm_linux下python安装
  11. RHEL7.X双网卡绑定
  12. pythonint函数的参数_pythonint函数怎么用
  13. python 代码命令大全
  14. 华为交换机如何导出配置信息_华为交换机配置命令 华为QuidWay交换机配置命令手册...
  15. wireshark 安装失败报错,缺少kb2999226补丁的解决方案
  16. css单行、多行文本溢出显示省略号
  17. Github 单文件快速下载 -- 使用 DownGit
  18. java数字转换中文
  19. 【Flutter 专题】114 图解自定义 ACEProgressPainter 对比进度图
  20. MFC鼠标绘制直线段并使用编码裁剪算法

热门文章

  1. 求球体的表面积和体积
  2. C++产生随机数字最全教程
  3. EL表达式与JSTL标签库
  4. 计算机专业毕业生的就业政策,计算机专业毕业生就业情况分析及应对策略
  5. buuctf——密码学的心声
  6. 安装原生Win7-SP1系统
  7. 如何将开发好的安卓应用程序发布到安卓市场或商店
  8. 空气质量指数月统计历史数据爬取
  9. Python编写后门程序
  10. sub1G-CC1310的应用开发之入门