大家好,我是帅气的超级饭团。我最近刚和我姐夫约好了晚餐。饭桌上小舅子说的第一句话就是:听说你是程序员?你能为我写一个自动化脚本吗?我发现外行人认为程序员无所不能,但实际上我们都只知道ctrlc+ctrlv。当然不是,我不得不这么做。虽然我连自动化脚本怎么做,用什么语言都不知道,但是为了妹妹,我不能懦弱。喝了几口白酒,鼓起勇气,和小舅子商量酒的必要性。经过三轮菜五味,终于确定了需求。大致是这样的:自动登录一个APP,自动搜索指定宝贝,自动评论并留下自定义搜索关键词,自定义消息条数汇总为根据关键词自动评论。那么我们需要提供一个UI操作来确认需求。加了几杯白红啤酒后,我问小舅子,那你妹妹是我的吧?小舅子说:要了,她就是你的了。拼了,那天晚上就开始奋斗了,先是搜索相关技术,然后开始查漏补缺,最后开始实现需要展示给大家的技术:autojs,一个有点js编程意识的自动化脚本引擎,以及实现语言是js,有点Android意识,毕竟自动化脚本的目标是Android手机。最后给大家看看我辛苦了一晚上的效果。大致分为几个步骤:第一步是UI界面的设计ui.layout(闲鱼自动评论1.宝贝标签2.评论内容3.处理的项目总数开始执行)最后呈现的界面是这样的虽然丑,但是可??以用第二步点击后的处理ui.ok.click(()=>{vartarget=ui.target.text();varcomment=ui.comment.text();vartotal=ui.total.text();letmain=newMain();threads.start(function(){main.process(target,comment,total);});});即第三步监听按钮的点击处理letutils=newAppUtils();utils.consoleShow();console.log("处理参数:"+target+","+message+","+limit);letmainTarget;auto.waitFor();utils.openApp("闲鱼");letsearch=id("search_bar_layout").untilFind();utils.clickView(search[0]);letsousuoInputs=className("android.widget.EditText").indexInParent(1).depth(6).untilFind()sousuoInputs[0].setText(target)utils.paste(sousuoInputs[0],target);utils.sleep(1000);letresults=className("android.view.View").descContains(target).untilFind();utils.clickView(结果[0]);mainTarget=results[0].desc();console.log("设置标签:"+mainTarget);vartargetViewMap=newjava.util.HashMap();while(targetViewMap.size()=10;});if(targetViews.length<=viewIndex){break;}让targetView=targetViews[viewIndex++];让文本=targetView.desc();text=text.substring(0,Math.min(10,text.length));如果(!targetViewMap.containsKey(文本)){utils.sleep(1000);utils.clickView(targetView);utils.sleep(1000);if(textContains("客服").findOnce()!=null){utils.tryback(mainTarget);继续;}让btns=className("android.view.View").untilFind()varleaveMessage;for(keyinbtns){letbtn=btns[key]try{if(btn.desc()==null){继续;}if(btn.desc()=="留言"){leaveMessage=btn;休息;}if(!isNaN(btn.desc())){leaveMessage=btn;休息;}}catch(错误){}}utils.clickView(leaveMessage);utils.sleep(1000);try{leaveMessage.setText(message)}catch(error){}try{letleaveMessage2=descContains("看到就留言").findOnce();utils.clickView(leaveMessage2);utils.sleep(1000);leaveMessage2.setText(message)}catch(error){}try{letleaveMessage3=textContains("如果你看对了,请留言").findOnce();utils.clickView(leaveMessage3);utils.sleep(1000);leaveMessage3.setText(message)}catch(error){}utils.sleep(1000);让sendBtn=textContains("发送").findOnce();if(sendBtn==null){console.warn("找不到发送按钮:"+text)continue;}utils.clickView(sendBtn);console.log("评论成功,避免被监控,停止1秒")utils.试回(主要目标);utils.sleep(3000);targetViewMap.put(text,targetView);console.log("当前评论成功数:"+targetViewMap.size())if(targetViewMap.size()>=limit){break;}}}while(true){如果(scrollDown(0)){中断;}}}console.log("执行完成");可以看到第3步有很多sleep,都是等待界面渲染的时间,因为手机比较卡,所以等待的时间也比较长。最后我把剧本打包发给小舅子。小舅子高兴坏了……当然,小舅子高兴,我也高兴。github和码云上线了,有兴趣学习的可以看看github地址:脚本仓库码云地址:脚本仓库B站视频:教学视频