[pig框架实战] 手撕视频管理发布平台[09] - 自动化发布视频到抖音

导读:
本系列实现视频管理平台,并依次介绍目前主流的短视频平台(抖音、快手、B站、微视、小红书、好看视频、西瓜视频、视频号、搜狐视频等)的短视频自动发布,希望帮助大家更方便、高效的来进行自媒体的创作与管理。
【本文介绍的是抖音的短视频自动发布】

- - - -系列文章- - - -

编写爬虫

环境搭建

参考《[selenium][01] - 环境搭建

selenium等待元素出现

  1. 隐式等待
    -
  2. 显示等待
    在这里插入图片描述
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 不用强记,需要使用的时候直接拷贝,修改后面的元素值即可**((By.ID,'1'))**
ele = WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.ID,'1')))
  1. time.sleep

爬虫编写

import os
import sys
import time
import base64
import types
import json
import pathlib
import selenium
from selenium.webdriver.common import keys, by
from selenium.webdriver.support import ui, expected_conditions


def publish(param):
    """
    作用:发布视频
    """
    options = selenium.webdriver.ChromeOptions()
    options.add_argument(r'--user-data-dir=J:\\_ALL\\chrome--user-data-dir\\公众号\\浏览器登录\\20000-爬虫分析')
    # didable "Chrome is being controled by an automated test software"
    options.add_argument('disable-infobars')
    driver = selenium.webdriver.Chrome(executable_path=r'J:\_ALL\CODE\venv\py386_automate\Scripts\chromedriver.exe', options=options)
    driver.implicitly_wait(5)

    # 进入抖音创作者页面,并上传视频
    # https://creator.douyin.com/creator-micro/content/upload
    driver.get("https://creator.douyin.com/creator-micro/content/publish")
    driver.find_element_by_xpath('//input[@type="file"]').send_keys(param.get_path_video())

    # 等待视频上传完成
    ui.WebDriverWait(driver, 2 * 60).until(
        expected_conditions.text_to_be_present_in_element((by.By.CLASS_NAME, 'preview-box'), 'ACG美女cosplay福利')
    )

    print("视频已上传完成!")
    time.sleep(5)

    # 添加封面
    driver.find_element_by_xpath('//*[text()="编辑封面"]').click()
    time.sleep(1)
    driver.find_element_by_xpath('//div[text()="上传封面"]').click()
    time.sleep(1)
    driver.find_element_by_xpath('//input[@type="file"]').send_keys(param.get_path_cover())
    time.sleep(3)
    driver.find_element_by_xpath('//*[text()="裁剪封面"]/..//*[text()="确定"]').click()
    time.sleep(3)
    driver.find_element_by_xpath('//*[text()="设置封面"]/..//*[contains(@class,"upload")]//*[text()="确定"]').click()

    time.sleep(5)
    # 输入视频描述
    driver.find_element_by_xpath('//div[@aria-autocomplete="list"]//br').send_keys(param.get_title() + " #上热门 #dou上热门 #我要上热门")

    # 设置选项
    if False:
        time.sleep(1)
        driver.find_element_by_xpath('//*[@class="radio--4Gpx6"]').click()
        time.sleep(1)
        driver.find_element_by_xpath('//*[@class="semi-select-selection"]//span[contains(text(),"输入")]').click()
        time.sleep(1)
        driver.find_element_by_xpath('//*[@class="semi-select-selection"]//input').send_keys("中关村人工智能科技")
        time.sleep(1)
        driver.find_element_by_xpath('//*[@class="semi-select-selection"]//input').send_keys("园")
        time.sleep(5)
        driver.find_element_by_xpath('//*[@class="semi-popover-content"]//*[text()="中关村人工智能科技园"]').click()

    # 设置合辑
    eles = driver.find_elements_by_class_name('semi-select-single')
    if len(eles):
        eles[-1].click()
        time.sleep(1)
        eles = driver.find_elements_by_class_name('semi-select-option')
        if len(eles):
            eles[-1].click()

    # 同步到西瓜视频
    if False:
        time.sleep(1)
        # driver.find_element_by_xpath('//div[@class="preview--27Xrt"]//input').click()   # 默认启用一次后,后面默认启用了。
        time.sleep(1)
        driver.find_element_by_xpath('//*[@class="card-pen--2P8rh"]').click()
        time.sleep(1)
        driver.find_element_by_xpath('//*[@class="DraftEditor-root"]//br').send_keys(describe + " #上热门")
        time.sleep(1)
        driver.find_element_by_xpath('//button[text()="确定"]').click()

    # 设置发布时间

    # # 点击发布
    time.sleep(5 * 60)
    # driver.find_element_by_xpath('//*[text()="发表"]').click()

    return 0

class VideoParam:
    def __init__(self, param_b64):
        # base64解密
        param_j = json.loads(base64.b64decode(param_b64))
        print(param_j)

        # 解析参数
        self.param = types.SimpleNamespace(**param_j)

        self.path_root = r'J:/_ALL/CODE/gitee/constellations/pig-ui/public/_tiktok_res/'

    def get_title(self):
        """拼接 myTitleCn myTagsCn"""
        return '{} {}'.format(self.param.myTitleCn, self.param.myTagsCn)

    def get_path_video(self):
        return '{}video/{}.mp4'.format(self.path_root, self.param.jId)

    def get_path_cover(self):
        return '{}cover/{}.jpg'.format(self.path_root, self.param.jId)


def main():
    # 处理参数
    if len(sys.argv) < 2:
        print('len(sys.argv) < 2')
        return 1

    param = VideoParam(sys.argv[1])
    print(param.get_title(), param.get_path_video(), param.get_path_cover())

    # 开始执行视频发布
    return publish(param)

main()

这里的等待视频上传完成是通过上传后,类元素preview-box的内容会变成作者名称的字符串(小编的变成了@ACG美女cosplay福利,大家根据自己的账号进行修改即可。

集成到视频管理平台Encampment

代码和 [pig框架实战] 手撕视频管理发布平台[08] - 自动化发布视频到微信视频号一样的,参考文章即可。

参考资料

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值