利用Python实现下载抖音短视频的方法

  介绍

这期内容当中小编将会给大家带来有关利用Python实现下载抖音短视频的方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强>查尔斯

查尔斯是一个应用程序抓包工具,与Filddler的功能相似,利用它可以得到应用程序运行过程中发生的所有网络请求和响应内容。

在电脑端下载安装完查尔斯后,需要配置证书,最后开启SSL监听。

手机端则是需要与电脑在同一网络下,比如都连接家里的wi - fi,然后在手机的wi - fi高级选项里使用查尔斯·代理,输入电脑的IP地址,端口8888,最后为证书命名。

连好以后,手机打开抖音应用,随着操作应用的动作,可以获取到视频的请求信息。

利用Python实现下载抖音短视频的方法

通过多次实验,发现链接的后面是会不停的改变,只有链接的前头始终不变,即“http://v1-dy”“http://v6-dy”“http://v9-dy”不变。

所以在写脚本的时候,可以用这些信息做为链接开头。

MitmProxy

利用Python实现下载抖音短视频的方法

利用MitmProxy中的mitmdump组件,对Python脚接本,用Python实现监听后的处理。

这里我只是利用脚本获取链接,并没有直接利用脚本下载视频。

因为我是在mitmdump。exe文件所在的文件夹运行脚本,脚本里导入不了请求模块。

不想配置环境变量了,所以只获取链接。

利用链接再去下载视频,视频链接需要去重,因为可能会有重复的。

Python脚本如下:

 def响应(流):
  url=[& # 39; http://v1-dy& # 39; & # 39; http://v3-dy& # 39;, & # 39; http://v6-dy& # 39;, & # 39; http://v9-dy& # 39;】
  #对url进行筛选,只选取视频的url
  为在url网址:
  如果url flow.request.url:
  打印(& # 39;\ n \ n抖音视频\ n \ n # 39;)
  张开(& # 39;douyin.csv& # 39;, & # 39; a + & # 39;,编码=& # 39;utf-8-sig& # 39;) f:
  f.write (flow.request。url + & # 39; \ n # 39;) 

配置抖音的Appium参数:

利用Python实现下载抖音短视频的方法

点击蓝色按钮,手机自动启动抖音应用。接着操作手机,然后点击Appium的刷新键,获取元素定位代码。

通过本次的实践发现Appium有时并不能很好的获取元素的定位,针对找不到的元素,我直接对手机屏幕位置进行点击。

由于大家手机屏幕大小不同,这个参数肯定是会变化的,所以存在弊端,无法通用。

左右滑动切换图片

利用Python实现下载抖音短视频的方法

利用Python实现下载抖音短视频的方法

利用Python实现下载抖音短视频的方法

大致操作如上图.UP主的主页图漏了,请自行脑补,Python代码如下:

进口时间
  进口随机
  从appium进口webdriver
  从selenium.webdriver.common.by进口
  从selenium.webdriver.support。ui进口WebDriverWait
  从appium.webdriver.common.touch_action进口TouchAction
  从selenium.webdriver。支持导入expected_conditions EC
  
  
  def main ():
  #设置驱动配置
  服务器=& # 39;http://localhost: 4723/wd/中心# 39;
  desired_caps={
  & # 39;platformName& # 39;: & # 39; android # 39;
  & # 39;设备名称# 39;:& # 39;STF_AL00& # 39;
  & # 39;appPackage& # 39;: & # 39; com.ss.android.ugc.aweme& # 39;
  & # 39;appActivity& # 39;: & # 39; .main.MainActivity& # 39;
  #关闭手机软键盘
  & # 39;unicodeKeyboard& # 39;:没错,
  & # 39;resetKeyboard& # 39;:没错
  }
  司机=webdriver。远程(服务器、desired_caps)
  等待=WebDriverWait(司机、60)
  #同意用户隐私协议,点击
  button_1=wait.until (EC.presence_of_element_located ((。ID, & # 39; com.ss.android.ugc.aweme: ID/q6 # 39;)))
  button_1.click ()
  #禁止电话权限,点击
  button_2=wait.until (EC.presence_of_element_located ((。ID, & # 39; com.android.packageinstaller: ID/permission_deny_button& # 39;)))
  button_2.click ()
  #禁止位置权限,点击
  button_3=wait.until (EC.presence_of_element_located ((。ID, & # 39; com.android.packageinstaller: ID/permission_deny_button& # 39;)))
  button_3.click ()
  time . sleep (2)
  #向上滑动,进入抖音视频播放页面
  TouchAction(司机)。新闻(x=515, y=1200)。move_to (x=515, y=1000) .release () .perform ()
  #这里需要设置一个较长时间的延迟,因为抖音有引导操作和提示,需等待片刻
  time . sleep (20)
  #点击抖音“喜欢“处,以此进入登录界面
  TouchAction(司机)。出版社(x=950, y=800) .release () .perform ()
  #点击密码登录
  button_4=wait.until (EC.presence_of_element_located ((。ID, & # 39; com.ss.android.ugc.aweme: ID/二自由度陀螺仪# 39;)))
  button_4.click ()
  #输入账号
  button_5=wait.until (EC.presence_of_element_located ((。ID, & # 39; com.ss.android.ugc.aweme: ID/ab_& # 39;)))
  button_5.send_keys(& # 39;你的账号& # 39;)
  #输入密码
  button_6=wait.until (EC.presence_of_element_located ((。ID, & # 39; com.ss.android.ugc.aweme: ID/aes # 39;)))
  button_6.send_keys(& # 39;你的密码& # 39;)
  time . sleep (2)
  #因为会跳出软键盘,会遮挡登录按钮,需点击软键盘取消
  TouchAction(司机)。出版社(x=980, y=1850) .release () .perform ()
  time . sleep (2)
  #点击登录按钮
  button_7=wait.until (EC.presence_of_element_located ((。ID, & # 39; com.ss.android.ugc.aweme: ID/abb # 39;)))
  button_7.click ()
  time . sleep (2)
  #登录成功,进入抖音视频界面,点击下方标题栏“我”;
  TouchAction(司机)。出版社(x=990, y=1850) .release () .perform ()
  #进入个人主页,点击关注处
  button_8=wait.until (EC.presence_of_element_located ((。ID, & # 39; com.ss.android.ugc.aweme: ID/a_7& # 39;)))
  button_8.click ()
  #进入关注栏,点击第二个关注
  button_9=wait.until (EC.presence_of_element_located ((。XPATH, & # 39;/等级/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.LinearLayout/android.support.v7.widget.RecyclerView android.widget.RelativeLayout [2]/android.widget.RelativeLayout [1] & # 39;)))
  button_9.click ()
  #进入了主主页,点击第一个视频
  button_10=wait.until (EC.presence_of_element_located ((。ID, & # 39; com.ss.android.ugc.aweme: ID/包# 39;)))
  button_10.click ()
  #不断下滑页面,直到底部
  而真正的:
  TouchAction(司机)。新闻(x=515, y=1247)。null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

利用Python实现下载抖音短视频的方法