当前位置: 首页 > 后端技术 > Python

Python+UIautomator2控制手机实现自定义脚本

时间:2023-03-25 23:45:34 Python

原因是最近听说用按键精灵打包apk要收费。..偶尔可以用一下,现在看来可以放弃了,以后还是用autojs吧。但是也正因为如此,我想起了一个需求:Python自定义相关参数(输入文本)来控制手机。回想一下,这个要求主要是为了应用于移动爬虫。对于那些反爬虫机制特别严格的应用,可以从这个角度来实现爬取数据。比如需要采集公众号的某篇文章,可以通过Python的mitmproxy库进行监控,使用UIautomator2库控制手机搜索目标公众号(Python中输入名字并传递给手机)并得到所有的文章,在mitmproxy中可以提取相关数据。Python控制手机adb的几种方案(需要USB连接手机并开启USB调试)UIautomator2(比较快,使用起来快捷方便,USB/WiFi可用)appium(流行,跨平台,封装UIautomator2)选择的方案不一定靠谱,adb的稳定性很差,appium的速度也不够快,所以从上手难度、运行速度和稳定性等角度考虑,我这里选择了UIautomator2。UIautomator2安装安装库#安装uiautomator2(PC端)pip3install-Uuiautomator2#连接USB,安装apk包括httprpc服务到手机(手机端)python-muiautomator2init注意:如果安装失败,首先检查是否是网络问题,我用清华的源安装正常。安装第二步可能会出现各种问题。可以参考github:https://github.com/openatx/uiautomator2运行示例,直接新建Python文件。内容为:importuiautomator2asu2d=u2.connect()#连接设备print(d.info)安装辅助编辑器weditor#安装pipinstall--upgradeweditor#安装移动端(有的可以跳过上面安装了)python-muiautomator2init#启动python-mweditor脚本实例控制微信阅读和刷读Importuiautomator2asu2importtimed=u2.connect('emulator-5554')#连接设备#d=u2.connect('192.168.1.7')#height=d.info['displayHeight']#width=d.info['displayWidth']print(d.info)d.app_start('com.tencent.weread')d.toast.show('开始微信阅读')print('开始微信阅读')d(resourceId="com.tencent.weread:id/rx").click()d.toast.show('点击书架')print('点击书架')#手机#xpath='//*[@resource-id="com.tencent.weread:id/b51"]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]'#模拟器xpath='//*[@resource-id="com.tencent.weread:id/ni"]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]'d.xpath(xpath).click()d.toast.show('点击第一本书')打印('点击书1')print('reading...')start=time.perf_counter()page=0whileTrue:page+=1d.click(0.985,0.537)d.toast.show('阅读{}页'.format(page))time.sleep(10)#10秒每页readtime=time.perf_counter()-startifreadtime>5*3600:breakprint('共查看{}页,使用时间{}'.format(page,readtime/3600))控制抖音/快手至尊版等短视频软件自动播放下一首(持续递减)刷金币importuiautomator2asu2importtimeimportrandomd=u2.connect('emulator-5554')#连接到设备#d=u2.connect('192.168.1.7')#height=d.info['displayHeight']#width=d.info['displayWidth']print(d.info)d.app_start('com.kuaishou.nebula',"com.yxcorp.gifshow.HomeActivity")d.toast.show('开始快手极速版')print('开始快手极速版')#模拟器d.xpath('//*[@resource-id="com.kuaishou.nebula:id/recycler_view"]/android.widget.RelativeLayout[2]/android.widget.ImageView[1]').click()d.toast.show('点击thesecondvideo')print('clickonthesecondvideo')print('watchingthevideo...')start=time.perf_counter()page=0whileTrue:page+=1d.swipe(0.5,0.8,0.6,0.3,0.2)d.吐司.show('View{}items'.format(page))time.sleep(10+random.randint(5,12))#A10+nsecondreadtime=time.perf_counter()-startifreadtime>5*3600:breakprint('总共浏览了{},时间{}'.format(page,readtime/3600))