完整代码如下
import uiautomator2 as u2
import time
class Douyin(object):
# 在__init__
def __init__(self, serial="127.0.0.1:62001"):
self.d = u2.connect_usb(serial = serial)
self.handle_watcher()
self.start_app()
self.size = self.get_windowsize()
# 用来获取初始的时间
self.t0 = time.perf_counter()
def start_app(self):
"""启动app"""
self.d.app_start(package_name="com.ss.android.ugc.aweme")
def stop_app(self):
# 关闭监视器
self.d.watcher.stop()
self.d.app_stop("com.ss.android.ugc.aweme")
self.d.app_clear("com.ss.android.ugc.aweme")
def stop_time(self):
"""停止时间(时间的单位是秒)"""
if time.perf_counter()-self.t0 > 20:
return True
def handle_watcher(self):
# 取消通知权限
self.d.watcher.when('//*[@resource-id="com.ss.android.ugc.aweme:id/a4r"]').click()
# 发现滑动查看更多
self.d.watcher.when('//*[@text="滑动查看更多"]').click()
# 回退的监听器
self.d.watcher.when('//*[@text="快速进图TA"]').click()
# 监控器写好之后 通过start方法启动
self.d.watcher.start(interval=1)
def get_windowsize(self):
"""获取窗口大小"""
return self.d.window_size()
def swipe_dou(self):
"""滑动抖音视频和点击视频发布者头像的操作"""
# 判断是否正常的进入到视频页面
# 考虑网络情况
if self.d(resourceId="com.ss.android.ugc.aweme:id/yy", text="我").exists(timeout=20):
while True:
# 到规定时间停止循环
if self.stop_time():
self.stop_app()
return
# 查看是不是正常的发布者(有加关注就不是广告)
if self.d(resourceId="com.ss.android.ugc.aweme:id/u0").exists:
# 是正常的发布者,点击头像
self.d(resourceId="com.ss.android.ugc.aweme:id/tw").click()
# 返回
self.d(resourceId="com.ss.android.ugc.aweme:id/et").click()
if self.d(resourceId="com.ss.android.ugc.aweme:id/yy", text="我").exists:
# 进入正常的视频页面 开始下滑
x1 = int(self.size[0] * 0.5)
y1 = int(self.size[1] * 0.9)
y2 = int(self.size[1] * 0.15)
self.d.swipe(x1, y1, x1, y2)
if __name__ == '__main__':
k = Douyin()
k.swipe_dou()