为了讨好大舅子,程序员竟当场学起了外挂???
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/
有兴趣学习外挂开发的可以持续关注我,后面会手把手为大家带来开发教程。
为了讨好大舅子,程序员竟当场学起了外挂???相关推荐
- java程序员入门先学什么开发者工具
学习java编程语言,那么开发工具是肯定少不了的,程序员入门基础中开发工具是一定要学会的,可以帮助开发者们提高开发效率.更优雅的写代码.由于开发者涉及的技术领域众多,以后端开发者的视角盘点平时可能用得 ...
- 数据结构 python的书推荐-为什么程序员一定要学数据结构?数据结构书单推荐~...
原标题:为什么程序员一定要学数据结构?数据结构书单推荐~ 来自:程序员书库(ID:OpenSourceTop) 人们最初使用计算机是用来处理简单的数值计算问题,当你使用计算机来处理一个问题时,一般经过 ...
- erp开发和java开发区别_Java程序员求职必学:Spring boot学习指南!
黑马程序员上海中心 学姐微信:CZBKSH 关注 咳咳,今天学姐就来和你们说说Spring对于Java程序员的重要性. 首先,Spring 官网首页是这么介绍自己的--"Spring: th ...
- 程序员为什么要学算法?
"程序员必须会算法 ?" 程序员对算法通常怀有复杂情感,算法很重要是共识,但是否每个程序员都必须学算法是主要的分歧点. 很多人觉得像人工智能.数据搜索与挖掘这样高薪的工作才用得上算 ...
- 程序员到底应该学什么?!
以前听别人说大公司和小公司在招牌上的差异,自己总是不信,总是沿着自己设计的路一直走,直到碰壁了,才终于醒悟!所以在此以一个过来人的身份再说:大公司和小公司在招聘上的差异,程序员到底应该学什么!可能没有 ...
- 不写情书,程序员为什么还要学写作?
跟小伙伴们一样,老兵哥也年轻过,在花季雨季也写过情书,不过经常石沉大海.当时特别希望自己的文笔好一些,像小说影视作品中的男猪脚那样一封书信就可以俘获菇凉的芳心.现今娃娃都能打酱油了,原来情书的效用早就 ...
- 36岁转行学java_年纪大了还想转行当程序员,现在学java还来得及吗
现在流行这样一种论调:说程序员就是吃青春饭的,年纪大了就不要再转行当java程序员了.可是仍然还有许多人前赴后继的想来学java当程序员,但是心里面有隐约担心:年纪也不小的,快30了还能学java吗? ...
- 学了go语言再学java容易吗_年纪大了还想转行当程序员,现在学java还来得及吗-Go语言中文社区...
现在流行这样一种论调:说程序员就是吃青春饭的,年纪大了就不要再转行当java程序员了.可是仍然还有许多人前赴后继的想来学java当程序员,但是心里面有隐约担心:年纪也不小的,快30了还能学java吗? ...
- Google大佬自述:天才程序员竟也有不为人知的秘密,看完真的学到了!
缘起 最近在YouTube里看了一条谷歌大佬的公开演讲,题目叫做The Myth of the Genius Programmer,翻译过来就是天才程序员的秘密.这篇演讲是两位在谷歌subversio ...
- 【程序员跳槽】学弟被高薪挖走不到一年就后悔的无奈经历,到底是老板的水深?还是学弟太年轻?
01 我的学弟,最近向我吐槽,2020 年下半年入职一家公司,当时是高薪挖走的他,所谓钱到位,工作也是充满干劲,不到一年的时间,参与了不少项目. 可是疲于应对工作,填了不少的技术"坑&quo ...
最新文章
- c语言合法常量2.57e03,[单选] 目前杭州共有世界遗产()项。
- 学习opengl(起步)
- 人生应该记住的16句话
- 张高兴的 .NET Core IoT 入门指南:环境配置、Blink、部署
- e3是合法浮点数吗_下列哪些是不合法的浮点数的选项是 123 2e4.2 .e5 -e3 .234 1e3
- python 下的数据结构与算法---6:6大排序算法
- C++笔记-设置cout输出数据的宽度和填充
- 如何关闭文件服务器的同步,文件服务器同步
- 数据分析基本思路及手法
- python gdbm_linux下python安装
- RHEL7.X双网卡绑定
- pythonint函数的参数_pythonint函数怎么用
- python 代码命令大全
- 华为交换机如何导出配置信息_华为交换机配置命令 华为QuidWay交换机配置命令手册...
- wireshark 安装失败报错,缺少kb2999226补丁的解决方案
- css单行、多行文本溢出显示省略号
- Github 单文件快速下载 -- 使用 DownGit
- java数字转换中文
- 【Flutter 专题】114 图解自定义 ACEProgressPainter 对比进度图
- MFC鼠标绘制直线段并使用编码裁剪算法