目录
- 前言
- 参考资料
- uiautomator2+WEditor安装方法
- WEditor
- uiautomator2
- 正文
前言
我不得不吐槽下,不过这部分内容没啥营养,可以直接往下看。
我本来是要学appium的,但是从门到放弃…环境搭建麻烦…好不容易搭建起来, 要不连接不上模拟器, 要不appium无法控制模拟器。最后用真机,结果sdk自带的uiautomator还无法截取真机画面。哪怕用appium-doctor的定位工具,部分元素根本无法定位…在我即将要放弃的时候,让我发现了uiautomator2+WEditor。
这两个玩意是真的香。。。。
参考资料
uiautomator2的语法介绍
WEditor的Github
uiautomator2+WEditor安装方法
- 安装uiautomator2
1 | pip install uiautomator2 |
- 安装WEditor
1 | pip install weditor |
- 为虚拟机或真机安装插件在,CMD中输入:
1 | python -m uiautomator2 init |
- 启动WEditor
1 | python -m weditor |
WEditor
个人感觉是目前比较好用的元素定位工具,它提供了一个web页面并且还自带IDE,能一遍调试一边写代码。最重要是连接方式非常简单,手机和电脑在同一个局域网下,用IP就可以连接了;或者用USB连接,然后输入设备序列号即可。
关键它还支持IOS!
cmd 输入
uiautomator2
uiautomator2的语法和appium还是有点出入的, 但是要理解起来并不难,因为功能都是类似的。详情可以查看参考资料里面的内容。
正文
代码没有做优化…只是实现功能就算了
在cmd中输入
然后在手机中打开抖音,然后在cmd中输入
然后在cmd中输入
- 初次使用要先安装插件,在安装方式里面有写
- 建议将Chrome浏览器设为默认浏览器
打开后就如下:
然后开始分析元素
- 首先是抖音APP的包名, 刚刚已经获取到了, 这个包名后面可以用来启动或关闭APP
- 如何进入某个抖音号的详情页面? 通常可以通过点击抖音号的名称或者点击右方抖音号的头像,但是考虑到当前抖音号可能正在直播,因此我是通过点击抖音号名称的。
用WEditor定位抖音号名称
- 然后就是获取视频列表了。 默认情况下我是从第一个视频开始点赞的,这个就简单了,直接点第一个就行了。但我想指定它从第N个视频开始点赞,这里就要想办法,怎样才能让屏幕滑动到指定的视频并点击它?
我这里用了个比较愚蠢的办法,首先遍历当前屏幕有没有我指定的视频,如果没有就往下滑动,如果有就点击,否则继续循环。
那么开始分析视频的元素属性
首先是第一个视频的元素:
第二个视频的元素属性:
通过对比可以发现,XPATH的属性有变化,第一个视频它是FrameLayout[1],第二个视频它是FrameLayout[2],以此类推。 如果我想要从第10个视频开始点击, 那么只要判断屏幕是否存在FrameLayout[10]这个视频就可以了。
我这里简单的写了个函数
1 2 3 4 5 6 7 | def position(video_no): while True: if d.xpath('//*[@content-desc="视频{}"]'.format(video_no)).exists: # 判断指定的视频是否存在 d.xpath('//*[@content-desc="视频{}"]'.format(video_no)).click() # 如果存在就点击 break else: d.swipe_ext("up", 0.5) # 如果不存在就从下往上滑动 |
最后, 就是点赞的, 点赞操作很简单, 只需要定位小心心的位置, 然后点击就可以了,剩下的就是循环多次了。
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import uiautomator2 as u2 from time import sleep d = u2.connect("输入设备号或手机IP") # 连接手机 d.app_start("com.ss.android.ugc.aweme") # 启动APP def position(video_no): while True: if d.xpath('//*[@content-desc="视频{}"]'.format(video_no)).exists: # 判断指定的视频是否存在 d.xpath('//*[@content-desc="视频{}"]'.format(video_no)).click() # 如果存在就点击 break else: d.swipe_ext("up", 0.5) # 如果不存在就从下往上滑动 if __name__ == "__main__": d(resourceId="com.ss.android.ugc.aweme:id/title").click() # 点击抖音号名称 position(10) # 调用position 找到第10个视频 for i in range(15): """从第10个视频开始往下点赞15个视频""" d(resourceId="com.ss.android.ugc.aweme:id/api").click() # 点赞/点心 sleep(1) d.swipe_ext("up", 0.5) # 点完一个就滑动 sleep(1) d.app_stop("com.ss.android.ugc.aweme") # 关闭APP |
说实话…这代码写得挺烂的,但是我只是写来玩玩,如果哪天心血来潮再优化吧。
另外我在码云上还上传了自动发朋友圈的脚本,虽然还是没有优化过的代码,不过功能是实现了。
码云地址:https://gitee.com/lzk-1234/douyinzidongdianzan.git