我不得不吐槽下,不过这部分内容没啥营养,可以直接往下看。
我本来是要学appium的,但是从门到放弃…环境搭建麻烦…好不容易搭建起来, 要不连接不上模拟器, 要不appium无法控制模拟器。最后用真机,结果sdk自带的uiautomator还无法截取真机画面。哪怕用appium-doctor的定位工具,部分元素根本无法定位…在我即将要放弃的时候,让我发现了uiautomator2+WEditor。
这两个玩意是真的香。。。。
uiautomator2的语法介绍
WEditor的Github
pip install uiautomator2
pip install weditor
python -m uiautomator2 init
python -m weditor
个人感觉是目前比较好用的元素定位工具,它提供了一个web页面并且还自带IDE,能一遍调试一边写代码。最重要是连接方式非常简单,手机和电脑在同一个局域网下,用IP就可以连接了;或者用USB连接,然后输入设备序列号即可。
cmd 输入adb devices
就可以查看设备序列号
uiautomator2的语法和appium还是有点出入的, 但是要理解起来并不难,因为功能都是类似的。详情可以查看参考资料里面的内容。
代码没有做优化…只是实现功能就算了
在cmd中输入adb devices
获取设备ID
然后在手机中打开抖音,然后在cmd中输入com.ss.android.ugc.aweme
获取包名
然后在cmd中输入python -m weditor
启动weditor
我这里简单的写了个函数
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) # 如果不存在就从下往上滑动
最后, 就是点赞的, 点赞操作很简单, 只需要定位小心心的位置, 然后点击就可以了,剩下的就是循环多次了。
完整代码:
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