抖音,快手,小红书自动化发布

此程序为Python制作 使用selenium模拟用户点击网页

本人运行环境为m系列mac
未尝试移植windows

三家都是通过创作者中心类似的平台发布
这是一个应付煞笔老板让一天发200条视频出来的产物 也是第一次知道每个平台一天发的视频是有上限的
这三家网站的架构大差不差 ,元素之间的定位都差不多
本来还想写视频号 但无法定位元素 腾讯还是有点手子的

抖音

from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.edge.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import random


# 创建 Edge Options 对象
options = Options()

# 设置浏览器启动参数,关闭不必要的日志
options.add_argument('--disable-logging')  # 禁用所有日志
options.add_argument('--log-level=3')      # 仅显示错误日志
options.add_argument('--ignore-certificate-errors')  # 忽略SSL证书错误
options.add_argument('--ignore-ssl-errors=yes')      # 忽略SSL错误

#定义浏览器驱动
wd = webdriver.Edge()

#打开网页
wd.get('https://creator.douyin.com/creator-micro/home')

print("请扫码登录抖音创作者中心...")

# 等待登录完成(出现发布按钮)
WebDriverWait(wd, 300).until(
    EC.presence_of_element_located(
        (By.XPATH, "/html/body/div[1]/div[1]/aside/div/div/div/div/div[1]/div/div/div/button")  # 发布按钮
    )
)

print("登录成功")
import os
import time

VIDEO_DIR = "/Users/yuanningmuyou/PycharmProjects/自动化/shipin/"
VIDEO_EXTS = (".mp4", ".mov", ".avi", ".mkv")

while True:
    # 获取文件夹中所有视频
    videos = [f for f in os.listdir(VIDEO_DIR) if f.lower().endswith(VIDEO_EXTS)]

    # 文件夹空了就退出
    if not videos:
        print("视频已全部处理完成!")
        break

    # 取第一个视频
    video_file = videos[0]
    video_path = os.path.join(VIDEO_DIR, video_file)
    print("准备处理视频:", video_path)

    # 发布页面
    wd.get('https://creator.douyin.com/creator-micro/content/upload')

    # 上传文件
    input_element = WebDriverWait(wd, 300).until(
        EC.presence_of_element_located(
            (By.XPATH, "//input[@type='file']")
        )
    )
    import os

    VIDEO_DIR = "/Users/yuanningmuyou/PycharmProjects/自动化/shipin/"
    VIDEO_EXTS = (".mp4", ".mov", ".avi", ".mkv")

    videos = [
        os.path.join(VIDEO_DIR, f)
        for f in os.listdir(VIDEO_DIR)
        if f.lower().endswith(VIDEO_EXTS)
    ]

    if not videos:
        raise Exception("视频文件夹中没有可上传的视频")

    video_path = random.choice(videos)
    print("准备上传视频:", video_path)

    # 上传视频
    input_element.send_keys(video_path)
    print("视频已选择,开始上传...")

    desc_div = WebDriverWait(wd, 300).until(
        EC.presence_of_element_located(
            (By.XPATH, "//*[@id='DCPF']//div[@contenteditable='true']")
        )
    )

    success_msg = WebDriverWait(wd, 300).until(
        EC.presence_of_element_located(
            (By.XPATH,
             "/html/body/div[1]/div[1]/div/div[3]/div/div/div/div[2]/div/div/div/div/div[2]/div[1]/div/div[2]/div[1]/div/div[1]/div[1]")
        )
    )

    print("视频上传成功!")

    desc_div.click()
    desc_div.send_keys("天然植物,没有黑科技,无添加")

    # 发布
    element = wd.find_element(By.XPATH,
                              "/html/body/div[1]/div[1]/div/div[3]/div/div/div/div[2]/div/div/div/div/div[1]/div/div[5]/div/div/div/div/div/span/button")
    element.click()

    os.remove(video_path)
    print("已删除本地视频:", video_path)

    # 可以加短暂延迟
    time.sleep(2)

快手

from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.edge.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import random

# 创建 Edge Options 对象
options = Options()

# 设置浏览器启动参数,关闭不必要的日志
options.add_argument('--disable-logging')  # 禁用所有日志
options.add_argument('--log-level=3')  # 仅显示错误日志
options.add_argument('--ignore-certificate-errors')  # 忽略SSL证书错误
options.add_argument('--ignore-ssl-errors=yes')  # 忽略SSL错误

# 定义浏览器驱动
wd = webdriver.Edge()

# 打开网页
wd.get('https://passport.kuaishou.com/pc/account/login/?sid=kuaishou.web.cp.api&callback=https%3A%2F%2Fcp.kuaishou.com%2Frest%2Finfra%2Fsts%3FfollowUrl%3Dhttps%253A%252F%252Fcp.kuaishou.com%252Fprofile%26setRootDomain%3Dtrue')

print("请扫码登录...")

# 等待登录完成(出现发布按钮)
WebDriverWait(wd, 300).until(
    EC.presence_of_element_located(
        (By.XPATH, "/html/body/div[1]/div[1]/div[1]/div/section/ul/div[1]/div")  # 文本
    )
)

print("登录成功")
import os
import time

VIDEO_DIR = "/Users/yuanningmuyou/PycharmProjects/自动化/shipin/"
VIDEO_EXTS = (".mp4", ".mov", ".avi", ".mkv")

while True:
    # 获取文件夹中所有视频
    videos = [f for f in os.listdir(VIDEO_DIR) if f.lower().endswith(VIDEO_EXTS)]

    # 文件夹空了就退出
    if not videos:
        print("视频已全部处理完成!")
        break

    # 取第一个视频
    video_file = videos[0]
    video_path = os.path.join(VIDEO_DIR, video_file)
    print("准备处理视频:", video_path)

    # 发布页面
    wd.get('https://cp.kuaishou.com/article/publish/video')

    # 上传文件
    input_element = WebDriverWait(wd, 300).until(
        EC.presence_of_element_located(
            (By.XPATH, "//input[@type='file']")
        )
    )
    import os

    VIDEO_DIR = "/Users/yuanningmuyou/PycharmProjects/自动化/shipin/"
    VIDEO_EXTS = (".mp4", ".mov", ".avi", ".mkv")

    videos = [
        os.path.join(VIDEO_DIR, f)
        for f in os.listdir(VIDEO_DIR)
        if f.lower().endswith(VIDEO_EXTS)
    ]

    if not videos:
        raise Exception("视频文件夹中没有可上传的视频")

    video_path = random.choice(videos)
    print("准备上传视频:", video_path)

    # 上传视频
    input_element.send_keys(video_path)
    print("视频已选择,开始上传...")

    desc_div = WebDriverWait(wd, 300).until(
        EC.presence_of_element_located(
            (By.XPATH, "//*[@id='work-description-edit']")
        )
    )

    success_msg = WebDriverWait(wd, 300).until(
        EC.presence_of_element_located(
            (By.XPATH,
             "/html/body/div[1]/div[1]/div[1]/main/div/div/div[1]/div/div/haploid-html/haploid-body/div/div/div/div/div[1]/div/main/div[2]/div[2]/div[2]/main/section[1]/div/div[2]/video")
        )
    )

    print("视频上传成功!")

    # 检查是否有新手引导
    guide_elements = wd.find_elements(By.XPATH, "/html/body/div[4]/div/div/div[1]/div[2]")

    if guide_elements:
        # 新手引导存在,点击关闭
        guide_elements[0].click()
        print("已关闭新手引导")
    else:
        print("没有新手引导,继续执行")
    desc_div.click()
    desc_div.send_keys("天然植物,没有黑科技,无添加")

    # 发布
    element = wd.find_element(By.XPATH,
                              "/html/body/div[1]/div[1]/div[1]/main/div/div/div[1]/div/div/haploid-html/haploid-body/div/div/div/div/div[1]/div/main/div[2]/div[2]/div[1]/div[6]/div[1]")
    element.click()

    os.remove(video_path)
    print("已删除本地视频:", video_path)

    # 可以加短暂延迟
    time.sleep(2)

小红书

from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.edge.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import random


# 创建 Edge Options 对象
options = Options()

# 设置浏览器启动参数,关闭不必要的日志
options.add_argument('--disable-logging')  # 禁用所有日志
options.add_argument('--log-level=3')      # 仅显示错误日志
options.add_argument('--ignore-certificate-errors')  # 忽略SSL证书错误
options.add_argument('--ignore-ssl-errors=yes')      # 忽略SSL错误

#定义浏览器驱动
wd = webdriver.Edge()

#打开网页
wd.get('https://creator.xiaohongshu.com/login')

print("请扫码登录抖音创作者中心...")

# 等待登录完成(出现发布按钮)
WebDriverWait(wd, 300).until(
    EC.presence_of_element_located(
        (By.XPATH, "/html/body/div[1]/div/div[2]/div/div[2]/main/div[1]/div/div[1]/div")  # 发布按钮
    )
)

print("登录成功")

eelement = wd.find_element(By.XPATH,
                          "/html/body/div[7]/div[1]/button")
eelement.click()


import os
import time

VIDEO_DIR = "/Users/yuanningmuyou/PycharmProjects/自动化/shipin/"
VIDEO_EXTS = (".mp4", ".mov", ".avi", ".mkv")

while True:
    # 获取文件夹中所有视频
    videos = [f for f in os.listdir(VIDEO_DIR) if f.lower().endswith(VIDEO_EXTS)]

    # 文件夹空了就退出
    if not videos:
        print("视频已全部处理完成!")
        break

    # 取第一个视频
    video_file = videos[0]
    video_path = os.path.join(VIDEO_DIR, video_file)
    print("准备处理视频:", video_path)

    # 发布页面
    wd.get('https://creator.xiaohongshu.com/publish/publish?from=menu&target=video')

    # 上传文件
    input_element = WebDriverWait(wd, 300).until(
        EC.presence_of_element_located(
            (By.XPATH, "//input[@type='file']")
        )
    )
    import os

    VIDEO_DIR = "/Users/yuanningmuyou/PycharmProjects/自动化/shipin/"
    VIDEO_EXTS = (".mp4", ".mov", ".avi", ".mkv")

    videos = [
        os.path.join(VIDEO_DIR, f)
        for f in os.listdir(VIDEO_DIR)
        if f.lower().endswith(VIDEO_EXTS)
    ]

    if not videos:
        raise Exception("视频文件夹中没有可上传的视频")

    video_path = random.choice(videos)
    print("准备上传视频:", video_path)

    # 上传视频
    input_element.send_keys(video_path)
    print("视频已选择,开始上传...")

    desc_div = WebDriverWait(wd, 300).until(
        EC.presence_of_element_located(
            (By.XPATH, "//*[@id='publish-container']/div[2]/div[1]/div[1]/div[5]/div/div/div[1]/div[1]/div/div")
        )
    )

    success_msg = WebDriverWait(wd, 300).until(
        EC.presence_of_element_located(
            (By.XPATH,
             "//*[@id='publish-container']/div[2]/div[1]/div[1]/div[2]/div[1]/div/div[1]/div[2]/div/div[1]")
        )
    )

    print("视频上传成功!")

    desc_div.click()
    desc_div.send_keys("天然植物,没有黑科技,无添加")

    # 发布

    click_btn = WebDriverWait(wd, 30).until(
        EC.element_to_be_clickable(
            (By.XPATH,
             "/html/body/div[1]/div/div[2]/div/div[2]/main/div[3]/div/div/div/div/div/div/div[2]/div[2]/div/button[1]")
        )
    )

    click_btn.click()

    os.remove(video_path)
    print("已删除本地视频:", video_path)

    # 可以加短暂延迟
    time.sleep(2)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇