uiautomator2+WEditor+python–抖音APP自动点赞

目录

  • 前言
    • 参考资料
  • uiautomator2+WEditor安装方法
    • WEditor
    • uiautomator2
  • 正文

前言

我不得不吐槽下,不过这部分内容没啥营养,可以直接往下看。
我本来是要学appium的,但是从门到放弃…环境搭建麻烦…好不容易搭建起来, 要不连接不上模拟器, 要不appium无法控制模拟器。最后用真机,结果sdk自带的uiautomator还无法截取真机画面。哪怕用appium-doctor的定位工具,部分元素根本无法定位…在我即将要放弃的时候,让我发现了uiautomator2+WEditor。
这两个玩意是真的香。。。。

参考资料

uiautomator2的语法介绍
WEditor的Github

uiautomator2+WEditor安装方法

  1. 安装uiautomator2
1
pip install uiautomator2
  1. 安装WEditor
1
pip install weditor

  1. 为虚拟机或真机安装插件在,CMD中输入:
1
python -m uiautomator2 init
  1. 启动WEditor
1
python -m weditor

WEditor

个人感觉是目前比较好用的元素定位工具,它提供了一个web页面并且还自带IDE,能一遍调试一边写代码。最重要是连接方式非常简单,手机和电脑在同一个局域网下,用IP就可以连接了;或者用USB连接,然后输入设备序列号即可。
关键它还支持IOS!
cmd 输入adb devices就可以查看设备序列号
在这里插入图片描述
在这里插入图片描述

uiautomator2

uiautomator2的语法和appium还是有点出入的, 但是要理解起来并不难,因为功能都是类似的。详情可以查看参考资料里面的内容。

正文

代码没有做优化…只是实现功能就算了
在cmd中输入adb devices获取设备ID
在这里插入图片描述
然后在手机中打开抖音,然后在cmd中输入com.ss.android.ugc.aweme 获取包名
在这里插入图片描述
然后在cmd中输入python -m weditor 启动weditor

  • 初次使用要先安装插件,在安装方式里面有写
  • 建议将Chrome浏览器设为默认浏览器
    打开后就如下:
    在这里插入图片描述
    然后开始分析元素
  1. 首先是抖音APP的包名, 刚刚已经获取到了, 这个包名后面可以用来启动或关闭APP
  2. 如何进入某个抖音号的详情页面? 通常可以通过点击抖音号的名称或者点击右方抖音号的头像,但是考虑到当前抖音号可能正在直播,因此我是通过点击抖音号名称的。
    用WEditor定位抖音号名称
    在这里插入图片描述
  3. 然后就是获取视频列表了。 默认情况下我是从第一个视频开始点赞的,这个就简单了,直接点第一个就行了。但我想指定它从第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