当前位置: 首页 > news >正文

手把手教你用Python+UiAutomator2写一个抖音自动点赞脚本(附完整源码)

Python+UiAutomator2实战:打造抖音自动点赞机器人

刷抖音时看到喜欢的视频,手动点赞太麻烦?今天我们用Python和UiAutomator2打造一个自动点赞机器人,解放你的双手!这个项目不仅能帮你自动点赞感兴趣的内容,还能深入学习Android自动化测试的核心技术。

1. 环境准备与工具安装

在开始编写自动化脚本之前,我们需要准备好开发环境。UiAutomator2是一个强大的Python库,专门用于Android设备的UI自动化测试和操作。相比Appium,它更轻量级,执行速度更快,特别适合这种简单的自动化任务。

首先确保你的电脑已经安装了Python 3.6或更高版本。然后通过pip安装必要的库:

pip install uiautomator2 pip install weditor

weditor是一个可视化元素定位工具,能帮助我们快速获取APP界面元素的属性信息。安装完成后,在命令行运行:

python -m weditor

这会启动一个本地Web服务,通常访问地址是http://localhost:17310。确保你的Android设备已通过USB连接电脑,并开启了USB调试模式。

提示:在Android设备的开发者选项中开启"USB调试"和"USB安装"选项,部分设备还需要开启"USB调试(安全设置)"。

2. 设备连接与抖音APP启动

环境准备就绪后,我们开始编写Python脚本。创建一个新的Python文件,比如douyin_auto_like.py,然后添加以下代码:

import uiautomator2 as u2 import time # 连接设备 d = u2.connect() # 默认连接第一个USB设备 # 或者使用WiFi连接:d = u2.connect('192.168.1.x') # 打印设备信息 print(d.info) # 启动抖音APP d.app_start('com.ss.android.ugc.aweme') # 抖音的包名 time.sleep(5) # 等待APP完全启动

这段代码完成了三件事:

  1. 通过USB连接Android设备(如果是WiFi连接,使用connect()方法传入设备IP)
  2. 打印设备基本信息,确认连接成功
  3. 启动抖音APP并等待5秒让其完全加载

注意:抖音的包名可能会因版本或地区不同而变化,可以通过d.app_list_running()查看当前运行的应用包名。

3. 元素定位与点赞操作

抖音APP的界面元素会随着版本更新而变化,因此我们需要一种可靠的方式来定位点赞按钮。打开之前启动的weditor,在浏览器中查看抖音界面的元素结构。

通过分析,我们发现点赞按钮通常有以下特征:

  • className: android.widget.ImageView
  • resourceId: 包含"like"或"aweme"字样
  • 描述可能包含"点赞"

下面是定位并点击点赞按钮的代码:

def like_current_video(): # 尝试多种方式定位点赞按钮 like_btn = None try: like_btn = d(resourceIdMatches=".*like.*", className="android.widget.ImageView") if not like_btn.exists: like_btn = d(descriptionMatches=".*赞.*", className="android.widget.ImageView") if like_btn.exists: like_btn.click() print("点赞成功!") return True except Exception as e: print(f"定位点赞按钮失败: {e}") return False

这段代码展示了UiAutomator2强大的元素定位能力,我们使用了:

  • resourceIdMatches:通过正则表达式匹配resourceId
  • descriptionMatches:匹配元素描述
  • className:确保定位的是图片按钮

4. 视频滑动与自动化循环

单纯的点赞功能还不够,我们需要让脚本自动滑动到下一个视频并继续点赞。观察抖音的滑动操作,我们发现:

  1. 视频区域大约占据屏幕的70%-80%
  2. 向上滑动距离约为屏幕高度的60%
  3. 每次滑动后需要等待1-2秒让新视频加载

实现代码如下:

def swipe_to_next_video(): # 获取屏幕尺寸 width, height = d.window_size() # 计算滑动起点和终点 start_x = width * 0.5 start_y = height * 0.8 end_y = height * 0.2 # 执行滑动操作 d.swipe(start_x, start_y, start_x, end_y, duration=0.5) time.sleep(2) # 等待新视频加载 # 主循环 def main_loop(max_likes=50): like_count = 0 while like_count < max_likes: if like_current_video(): like_count += 1 print(f"已点赞 {like_count}/{max_likes} 个视频") swipe_to_next_video()

这个主循环会:

  1. 尝试点赞当前视频
  2. 滑动到下一个视频
  3. 重复直到达到设定的点赞数量

5. 完整代码与优化建议

将以上各部分组合起来,我们的完整自动点赞脚本如下:

import uiautomator2 as u2 import time class DouyinAutoLiker: def __init__(self): self.d = u2.connect() print("设备信息:", self.d.info) def start_douyin(self): self.d.app_start('com.ss.android.ugc.aweme') time.sleep(5) def like_current_video(self): try: like_btn = self.d(resourceIdMatches=".*like.*", className="android.widget.ImageView") if not like_btn.exists: like_btn = self.d(descriptionMatches=".*赞.*", className="android.widget.ImageView") if like_btn.exists: like_btn.click() print("点赞成功!") return True except Exception as e: print(f"定位点赞按钮失败: {e}") return False def swipe_to_next_video(self): width, height = self.d.window_size() self.d.swipe(width*0.5, height*0.8, width*0.5, height*0.2, 0.5) time.sleep(2) def run(self, max_likes=50): self.start_douyin() like_count = 0 while like_count < max_likes: if self.like_current_video(): like_count += 1 print(f"已点赞 {like_count}/{max_likes}") self.swipe_to_next_video() if __name__ == "__main__": bot = DouyinAutoLiker() bot.run(max_likes=30)

优化建议:

  1. 异常处理:增加更多异常捕获,确保网络波动或APP卡顿时脚本不会崩溃
  2. 智能等待:使用d.wait方法代替固定时间的sleep,提高效率
  3. 元素缓存:对频繁访问的UI元素进行缓存,减少查找时间
  4. 日志记录:添加详细的日志记录,方便调试和问题追踪
  5. 随机间隔:在操作之间加入随机延迟,使行为更接近人类操作

6. 常见问题与解决方案

在实际运行中,你可能会遇到以下问题:

问题1:无法找到点赞按钮

解决方案:

  • 使用weditor重新确认点赞按钮的属性
  • 尝试其他定位策略,如XPath或组合定位
  • 检查抖音版本是否更新导致界面变化

问题2:滑动后视频没有正确加载

解决方案:

  • 调整滑动距离和持续时间
  • 增加滑动后的等待时间
  • 检查网络连接是否稳定

问题3:脚本运行一段时间后停止

解决方案:

  • 添加心跳检测,定期检查APP是否在前台
  • 实现自动恢复机制,当检测到异常时重新启动APP
  • 设置最大运行时间,避免长时间运行导致手机发热
# 示例:心跳检测 def check_app_running(self): if not self.d.app_current()['package'] == 'com.ss.android.ugc.aweme': print("抖音不在前台,重新启动...") self.start_douyin()

7. 扩展思路与高级功能

基础功能实现后,我们可以考虑添加更多智能功能:

  1. 内容过滤:只点赞特定主题或关键词的视频

    def should_like_video(self): # 获取视频描述文本 desc = self.d(resourceIdMatches=".*desc.*").get_text() keywords = ["python", "编程", "技术"] return any(keyword in desc.lower() for keyword in keywords)
  2. 自动评论:对喜欢的视频添加预设评论

    def post_comment(self, text): comment_btn = self.d(resourceIdMatches=".*comment.*") if comment_btn.exists: comment_btn.click() time.sleep(1) self.d(resourceIdMatches=".*input.*").set_text(text) self.d(text="发送").click()
  3. 数据分析:收集点赞视频的数据进行分析

    def collect_video_info(self): info = { 'author': self.d(resourceIdMatches=".*author.*").get_text(), 'desc': self.d(resourceIdMatches=".*desc.*").get_text(), 'likes': self.d(resourceIdMatches=".*count.*").get_text(), 'time': time.strftime("%Y-%m-%d %H:%M:%S") } return info
  4. 定时任务:设置脚本在特定时间段运行

    import schedule def job(): bot = DouyinAutoLiker() bot.run(max_likes=30) schedule.every().day.at("12:00").do(job) schedule.every().day.at("18:00").do(job) while True: schedule.run_pending() time.sleep(60)

在实际项目中,我发现最关键的挑战是处理APP界面变化和网络不稳定性。通过添加多重元素定位策略和健壮的错误处理,可以大大提高脚本的稳定性。另外,适当设置操作间隔不仅能让行为更人性化,还能减少被系统检测为自动操作的风险。

http://www.zskr.cn/news/1359171.html

相关文章:

  • 跨平台资源下载终极指南:3步获取视频号、抖音、小红书等全网内容
  • 如何高效处理PDF文档:Windows平台的终极解决方案
  • Frida内存漫游:无符号环境下定位X-Gorgon加密逻辑
  • LLM服务中的KV缓存碳排放优化与GreenCache框架
  • 合肥 GEO 优化服务商精选|合肥豆包搜索优化优质机构推荐 - 行业深度观察C
  • 终极FileBrowser上手指南:10分钟掌握Web文件管理神器
  • 错过这波,明年补贴门槛将提高40%!——2025智慧农业专项申报倒计时,AI Agent集成度成核心评审权重(附工信部白名单厂商清单)
  • STM32驱动ST7735S屏幕避坑指南:从SPI时序到字库显示(附代码)
  • 别再百度了!工程师私藏的5个免费芯片Datasheet查询网站(附使用技巧)
  • 2026 年海南注册公司代理记账,哪家代办机构口碑好?新横向测评排行榜 - 速递信息
  • 工业级类别不平衡学习实战:从业务损益到模型部署
  • 从零上手腾讯 Marvis:真正接管电脑的 AI,看完直接封神
  • 工厂MES数据自动采集怎样用AI完成?资深架构师的非侵入式集成落地指南
  • 从玻纤到比特:拆解一张高速网卡PCB,看1078玻布如何影响你的网络延迟
  • AI Agent 推理:从单次对话到多轮工具调用
  • 初创团队如何利用Taotoken统一管理多项目的AI模型调用
  • 边缘多模态AI驱动的文档重构技术
  • 写作压力小了!盘点2026年人气爆表的AI论文平台
  • 【Elasticsearch从入门到精通】第15篇:Elasticsearch删除与更新API——精确操作与脚本更新
  • 用快递分拣站理解图神经网络:50行代码讲透GNN核心原理
  • OpenPLC Editor:免费开源PLC编程工具完全指南,轻松掌握工业自动化
  • Unity Player Settings详解:打包必备的底层配置与避坑指南
  • 授权服务器搭建与授权码模式实战:信任链构建指南
  • 给CFD新手的礼物:在Ubuntu 22.04上一键配置OpenFOAM v2206 + ParaView 完整开发环境
  • Unity Native内存泄漏检测:LeakDetection实战指南
  • 对比直接对接,使用Taotoken聚合平台在运维复杂度上的显著降低
  • 瑞芯微RK3562安卓核心板开发实战:从硬件解析到应用开发全指南
  • 告别盲测!用CANoe回放功能搭建你的车载网络“时光机”
  • Phyphox磁力计避坑指南:为什么你测的地磁场总不准?从校准到环境干扰的5个关键点
  • ArcGIS Pro插件开发避坑指南:从DAML配置到图标路径的那些‘坑’