# 自动刷抖音 **Repository Path**: yonja/automatic-tiktok ## Basic Information - **Project Name**: 自动刷抖音 - **Description**: 本自动化主要使用uiautomator2来刷抖音 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2024-01-26 - **Last Updated**: 2024-01-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 自动刷抖音 ### 1、uiautomator2 先必须安装androidsdk,用来检测连接电脑与手机: https://blog.csdn.net/weixin_38648367/article/details/128821417,使用USB数据线连接手机和电脑,手机要打开“开发者模式”。 ``` // cmd查看设备 adb devices ``` ![image-20231116164236257](assets/image-20231116164236257.png) 本次自动化主要使用uiautomator2,其官方网站: https://github.com/openatx/uiautomator2 python的版本最好是3.6+的,安装uiautomator2: ``` pip3 install -U uiautomator2 ``` 然后将ATX软件推送到手机,该软件的功能必须得打开: ``` python3 -m uiautomator2 init ``` 然后运行下面代码,打印连接信息: ```python import uiautomator2 as u2 d = u2.connect() # connect to device print(d.info) ``` ![image-20231116165114173](assets/image-20231116165114173.png) ### 2、web-editor web-editor是一个可以获取手机UI元素和位置的工具,官方网站: https://github.com/alibaba/web-editor,需要安装facebook-wda、开发版本web-editor。 ```python pip install facebook-wda git clone https://github.com/alibaba/web-editor pip3 install -e web-editor # 在安装好的目录下,启动server并打开浏览器,也可以手动访问 http://localhost:17310 weditor ``` 有个缺点,就是避免线程占用,只能有一个线程区连接手机,所以,当uiautomator2启动连接时,web-editor会断开,只能重新再启动。 ![image-20231116170353163](assets/image-20231116170353163.png) ### 3、抖音自动化demo 可以自动刷抖音视频,点赞,关注,评论,源码如下: ```python from uiautomator2 import Device import uiautomator2 as u2 import time import random ''' 操作一般有2种方法: 1. 使用像素点操作,局限性在于每台手机或者每个版本的UI位置不同 2. 使用UI图标路径操作,适用性更好 ''' # 下滑 def down_glide(): d.swipe(500, 1000, 500, 100) # 退出评论区 def quit_comments_area(): d.click(0.548, 0.114) time.sleep(2) # 打开评论区,并发送666 def open_comments_666(): # 打开评论区 d(resourceId="com.ss.android.ugc.aweme:id/dbh").click() # 点击输入框 time.sleep(0.4) d.click(0.129, 0.912) # 打开数字键盘 time.sleep(0.7) d.click(0.203, 0.905) # 点击 666 time.sleep(0.3) d.click(0.716, 0.763) d.click(0.716, 0.763) d.click(0.716, 0.763) # 点击发送 time.sleep(0.56) d(resourceId="com.ss.android.ugc.aweme:id/ddf").click() # 打开评论区,发送3颗红心 def open_comments_3heart(): # 打开评论区 time.sleep(0.26) d(resourceId="com.ss.android.ugc.aweme:id/dbh").click() # 点击输入框 time.sleep(0.39) d.click(0.129, 0.912) # 点击发送3个红心(第一个表情) time.sleep(1) d.click(0.088, 0.568) d.click(0.088, 0.568) d.click(0.088, 0.568) # 发送 time.sleep(0.56) d(resourceId="com.ss.android.ugc.aweme:id/ddf").click() # 发送 "作品不错+红心" def open_comments_good_work(): # 打开评论区 time.sleep(0.7) d(resourceId="com.ss.android.ugc.aweme:id/dbh").click() # 点击输入框 time.sleep(0.89) d.click(0.129, 0.912) # 发送 "作品不错+红心",即:zuopin bucuo 第一个表情 time.sleep(0.23) d.click(0.898, 0.464) d.click(0.209, 0.837) d.click(0.644, 0.695) d.click(0.837, 0.693) d.click(0.939, 0.693) d.click(0.743, 0.695) d.click(0.691, 0.837) d.click(0.085, 0.624) d.click(0.597, 0.836) d.click(0.647, 0.696) d.click(0.404, 0.837) d.click(0.644, 0.693) d.click(0.84, 0.692) d.click(0.085, 0.628) d.click(0.088, 0.568) # 发送 time.sleep(0.56) d(resourceId="com.ss.android.ugc.aweme:id/ddf").click() # 浏览评论区,打开评论区下滑 def open_comments_down_glide(): d(resourceId="com.ss.android.ugc.aweme:id/dbh").click() down_glide() # 点赞视频 def like(): d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/ewq"]/android.widget.ImageView[1]').click() # 关注作者 def attention(): if d(resourceId="com.ss.android.ugc.aweme:id/hld").exists: d(resourceId="com.ss.android.ugc.aweme:id/hld").click() print("关注成功") else: print("已经关注") if __name__ == '__main__': try: d = u2.connect() print('连接信息:', d.info) # 连接设备,可以使用cmd命令adb devices 查看 d = Device('dda69f49') # 启动抖音应用, # 抖音设置了权限,如果无法打开可以手动打开再运行,或者打开 ”抖音极速版“ d.app_start("com.ss.android.ugc.aweme") # 打开抖音 # d.app_start("com.ss.android.ugc.aweme.lite") # 打开抖音极速版 # 判断是否已经进入抖音视频界面 while True: is_pass_into = d.xpath('//*[@resource-id="com.ss.android.ugc.aweme:id/p11"]/android.view.View[1]').exists print("已经进入抖音视频界面") if is_pass_into: break for i in range(1, 16): # 接下来使用线程随机阻塞秒数来模仿人的行为,也就是在一个视频上停留的时间 a = random.uniform(1, 38) print(f'第{i}次停留:{a}s') time.sleep(a) # 一般不会对每条视频都操作,可以随机操作 b = random.randrange(1, 181) print(f'b的值是:{b} ') if 1 <= b <= 6: print('关注作者...') attention() elif 12 <= b <= 42: print('点赞...') like() elif 58 <= b <= 68: print('点赞并评论666...') # 点赞、评论666、退出评论区 like() time.sleep(0.32) open_comments_666() time.sleep(0.1) quit_comments_area() elif 69 <= b <= 82: print('评论3颗红心...') # 评论3颗红心、下滑看评论区、退出评论区 open_comments_3heart() time.sleep(1) down_glide() time.sleep(0.56) quit_comments_area() elif 88 <= b <= 100: print('评论作品不错...') open_comments_good_work() time.sleep(0.75) quit_comments_area() time.sleep(a / 10) # 下滑下一条视频 down_glide() except RuntimeError as e: print(e) except Exception as e: print(e) ```