导读:
本系列实现视频管理平台,并依次介绍目前主流的短视频平台(抖音、快手、B站、微视、小红书、好看视频、西瓜视频、视频号、搜狐视频等)的短视频自动发布,希望帮助大家更方便、高效的来进行自媒体的创作与管理。
【本文介绍的是抖音的短视频自动发布】
- - - -系列文章- - - -
- [pig框架实战] 手撕视频管理发布平台[01] - 开发背景和需求分析
- [pig框架实战] 手撕视频管理发布平台[02] - pig框架源码分析(去除开发过程中每次输入验证码的过程,方便快速登录)
- [pig框架实战] 手撕视频管理发布平台[03] - pig项目部署-服务器(myvideos)
[pig框架实战] 手撕视频管理发布平台[04] - [辅助功能] tiktok视频无水印下载并重命名- [pig框架实战] 手撕视频管理发布平台[05] - [辅助功能] 视频拷贝至PC
- [pig框架实战] 手撕视频管理发布平台[06] - 数据批量导入功能
- [pig框架实战] 手撕视频管理发布平台[07] - 修改视频属性
- [pig框架实战] 手撕视频管理发布平台[08] - 自动化发布视频到微信视频号
- [pig框架实战] 手撕视频管理发布平台[09] - 自动化发布视频到抖音
编写爬虫
环境搭建
selenium等待元素出现
- 隐式等待
- 显示等待
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')))
- 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] - 自动化发布视频到微信视频号一样的,参考文章即可。
参考资料
- 本文章后台代码 https://gitee.com/constellations/pig
- 本文章前端代码 https://gitee.com/constellations/pig-ui
- Python+selenium 实现自动上传并发布抖音短视频实例演示 https://lanzao.blog.csdn.net/article/details/120816445
- selenium等待元素出现
- qq群:夜猫逐梦技术交流裙/953949723