欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用 python 给抖音视频去个水印吧!

程序员文章站 2022-04-11 15:50:56
...

用 python 给抖音视频去个水印吧!

python 作为非常轻便的编程语言,经常被我在工作中用于自动化测试和制作一些小工具。今天我发现了我经常用的一个小程序,你只用复制抖音链接,看下他的广告,他就给你下载下来无水印的抖音视频。可是作为一个连 pron 都4倍速的我,怎么会看广告?于是,就有了这一次尝试。

思路复盘

技术服务于业务,我们使用技术首先是要考虑实现一个业务。

1. 打开浏览器访问我们复制的抖音链接
2. 找到视频播放按钮的位置,点击播放
3. 播放后找到 JS 加载到网页中的动态网址
4. 找到水印和非水印网址区别
5. 访问非水印的源网址,下载视频

打开浏览器访问网址

模拟浏览器,卧槽这个作为软件测试我老内行了。selenium 走起!对了,不想让浏览器打开,就给他设置一个无头吧~

pip install selenium
from selenium import webdriver # 导入 selenium 组件库

# 设置并获取无头浏览器
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
browser = webdriver.Chrome(options=chrome_options)
browser.implicitly_wait(10) # 等待元素加载
browser.get(url) # 访问抖音的网址

找到视频播放按钮

browser.find_element_by_css_selector(".xgplayer-start").click()

找到视频的真实地址

real_src = browser.find_element_by_tag_name("video").get_attribute("src") 

找到水印和非水印网址区别

这可是需要耐性的,我作为老白嫖直接在 CSDN 找到了别人的经验借鉴了。 playwm替换为 play,字节的员工还是很文艺,wm 就是 waterMark 水印的意思。

# 找到真实视频的src
real_src = browser.find_element_by_tag_name("video").get_attribute("src")  # type:str
# 替换为无水印的视频源
video_desc = browser.find_element_by_css_selector(".desc").text  # type:str

访问非水印的源网址,下载视频

不能让抖音知道我们是代码,那就给他加个请求头模拟浏览器吧。

# 存入本地
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
}
with open(f"{video_desc}.mp4", "wb") as fp:
    fp.write(requests.get(real_src, headers=headers).content)

源码函数

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: raolong
# datetime: 2021/4/3 21:03 
# ide: PyCharm

import requests
from selenium import webdriver


def remove_the_watermark(url):
    # 设置并获取无头浏览器
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    browser = webdriver.Chrome(options=chrome_options)
    browser.implicitly_wait(10)
    # 访问抖音的网址,解决掉重定向问题
    browser.get(url)
    # 找到播放按钮点击播放
    browser.find_element_by_css_selector(".xgplayer-start").click()
    # 找到真实视频的src
    real_src = browser.find_element_by_tag_name("video").get_attribute("src")  # type:str
    # 替换为无水印的视频源
    video_desc = browser.find_element_by_css_selector(".desc").text  # type:str
    real_src = real_src.replace("playwm", "play")
    # 存入本地
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
    }
    with open(f"{video_desc}.mp4", "wb") as fp:
        fp.write(requests.get(real_src, headers=headers).content)


if __name__ == '__main__':
    test_url = "https://v.douyin.com/e2xhgvA/"
    remove_the_watermark(test_url)
相关标签: python