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

Python自动化抖音自动刷视频

环境准备

  • Python3.5以上
  • Appium Server服务器
  • Android SDK,需要用到adb服务
  • 需要依赖Appium-Python-Client组件库
  • 真机或者模拟器,推荐模拟器(真机一般安卓8版本以上了,appium对安卓8以上版本元素获取的兼容性不太好)
  • JDK8环境

实现

确保adb服务和appium服务及真机/模拟器正常打开,然后在真机/模拟器上将抖音打开。

确定需要的参数

参数基本上都是固定的,只需要确定抖音的包名和活动页即可。

adb shell dumpsys window | findstr mCurrentFocus获取到抖音的包名数据,最后代码里的参数:

desired_caps = {
    "platformName": "Android",	# 平台是安卓的
    "deviceName": "127.0.0.1:62001",  # 通过 adb devices命令获取
    "appPackage": "com.ss.android.ugc.aweme",	# 抖音包名
    "appActivity": ".splash.SplashActivity",	# 活动页
    "platformVersion":"7.1" # 7.1.2
}

参数整完记得项目跑起来测试一下。

控制模拟器进入抖音后

我们需要去获取页面上的元素或坐标,来实现滑动视频等其他操作。

到我们的Android SDK的tools目录下使用uiautomatoviewer.bat取页面快照。

操作的过程其实相对简单,就是实现页面滑动即可;可能会遇到弹框、点击授权之类的,处理一下即可。然后还需要注意的就是元素的加载时间问题,尽量考虑好网络、设备等其他因素,将等待时间放长些。

# @creator by wlh
# @date 2023/3/15 19:43
import time

from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

desired_caps = {
    "platformName": "Android",
    "deviceName": "127.0.0.1:62001",  # 通过 adb devices命令获取
    "appPackage": "com.ss.android.ugc.aweme",
    "appActivity": ".splash.SplashActivity",
    "platformVersion": "7.1"  # 7.1.2
}

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_capabilities=desired_caps)

driver.implicitly_wait(20)	# 等待弹框元素
driver.find_element(By.XPATH, "//*[@text='同意']").click()
driver.implicitly_wait(20)	# 等待弹框元素
driver.find_element(By.XPATH, "//*[@text='允许']").click()

time.sleep(1.5)
size = driver.get_window_size()
width, height = size['width'], size['height']	# 获取屏幕宽高

action = TouchAction(driver)
for i in range(5):
    # 实现滑动
    action.press(x=width / 2, y=height / 3 * 2).wait(500).move_to(x=width / 2, y=height / 3).release()
    action.perform()
    try:
        # 3s后 弹框元素不出现,直接跳过继续执行
        WebDriverWait(driver, 3).until(ec.presence_of_element_located((By.XPATH, "//*[@text='允许']")))
        driver.find_element(By.XPATH, "//*[@text='允许']").click()
    except:
        pass

time.sleep(5)
driver.close_app()
driver.quit()

相关文章:

  • CANoe中使用CAPL刷写流程详解(Trace图解)(CAN总线)
  • Angular学习笔记(一)
  • 技术掉:PDF显示,使用pdf.js
  • Xinlinx zynq7045国产替代 FMQL45T900全国产化 ARM 核心板+扩展板
  • 硬刚ChatGPT!文心一言能否为百度止颓?中国版ChatGPT“狂飙”的机会在哪儿?
  • 【python】喜欢XJJ?这不得来一波大采集?
  • 用Python求解牛顿的草地与母牛问题
  • 面试官:MQ的好处到底有哪些?
  • 想要成为高级网络工程师,只需要具备这几点
  • 我在字节当主管:百次面试结果,总结一个刷掉99%求职者的问题!
  • 基于GPT-4的免费代码生成工具
  • 今年还能学java么?
  • 硬刚ChatGPT!文心一言能否为百度止颓?
  • CSS实现一个展示框
  • 【Java实战】不会还有人用if else进行参数校验吧
  • 系统架构:经典三层架构
  • 28岁小公司程序员,无车无房不敢结婚,要不要转行?
  • 十二、51单片机之DS1302
  • ES+Redis+MySQL,这个高可用架构设计太顶了!
  • Linux基础命令大全(上)
  • HTB-baby~
  • Docker使用DockerFile部署Go项目
  • 自己设计的网站,如何实现分页功能?(详细代码+注释)
  • O2O、C2C、B2B、B2C是什么意思
  • 带你一文透彻学习【PyTorch深度学习实践】分篇——加载数据集(Dataset类、DataLoader类核心参数讲解)附:实例源代码
  • 基于html+css的图片居中排列
  • Python通用验证码识别OCR库ddddocr的安装使用
  • 「无服务器架构」无服务器架构是应用程序的正确选择?需要考虑利弊。
  • Pycharm中修改git提交代码的账户和用户名【Git追溯注解,git blame】
  • 中介变量、调节变量与协变量