代码效果演示
Gitee源码
from pyautogui import *
from PIL import Image,ImageDraw,ImageFont
from time import sleep,time
import pyperclip
import os,fnmatch
import shutil
from send2trash import send2trash
def coverGener(title,fontPath,coverSavePath):
'''标题文本 最多九个汉字 字体 封面生成目录'''
pic=Image.new('RGBA',(1146,717),'#1D1D1F')
drawer=ImageDraw.Draw(pic)
fontCode=ImageFont.truetype(font=fontPath,size=100)
drawer.text((650,64),'源码',fill='#F25228',align='center',font=fontCode)
fontBrief=ImageFont.truetype(font=fontPath,size=74)
drawer.text((850,85),'在简介',fill='#F25228',align='center',font=fontBrief)
fontTitle=ImageFont.truetype(font=fontPath,size=120)
titleW,titleH=drawer.textsize(title,font=fontTitle)
drawer.text((int((1146-titleW)/2),215),title,fill='#00A3ED',align='center',font=fontTitle)
fontSub=ImageFont.truetype(font=fontPath,size=88)
drawer.text((128,400),'Python程序 效果演示',fill='#F5F5F7',align='center',font=fontSub)
pic.save(coverSavePath, quality=100,dpi=(300,300))
def uploadToXigua(delay,videoSavePath,title,titleSuffix,coverSavePath,videoBriefTitle,videoBrief,codeSiteTitle,codeSite,mode):
click(1440,140)
click(1732,244,button='right')
click(1463,245)
hotkey('ctrl','pgdn')
sleep(2.5+delay)
click(1210,578)
sleep(1+delay)
hotkey('shift','alt','s')
typewrite(videoSavePath)
sleep(0.5+delay)
press('enter')
hotkey('winleft','left')
click(570,191)
click(760,990)
sleep(0.5+delay)
click(767,651)
pyperclip.copy(title)
hotkey('ctrl','v')
pyperclip.copy(titleSuffix)
hotkey('ctrl','v')
click(690,884)
sleep(0.5+delay)
click(464,230)
click(950,615)
sleep(1+delay)
hotkey('winleft','left')
hotkey('shift','alt','s')
typewrite(coverSavePath)
sleep(0.5+delay)
press('enter')
sleep(1+delay)
click(1215,567)
dragTo(1215,258,duration=0.5)
sleep(1+delay)
click(1195,982)
sleep(1+delay)
click(1545,834)
sleep(1+delay)
click(1593,992)
sleep(0.5+delay)
click(1060,682)
sleep(2+delay)
click(1120,855)
hotkey('ctrl','home')
typewrite(['down' for n in range(4)])
click(535,778)
click(450,939)
typewrite(['down' for n in range(2)])
click(623,868)
pyperclip.copy(videoBriefTitle)
hotkey('ctrl','v')
pyperclip.copy(videoBrief)
hotkey('ctrl','v')
press('enter')
pyperclip.copy(codeSiteTitle)
hotkey('ctrl','v')
pyperclip.copy(codeSite)
hotkey('ctrl','v')
click(1244,574)
hotkey('ctrl','end')
if mode=='upload':
click(447,933)
elif mode=='test':
click(586,934)
def uploadToBilibil(delay,videoSavePath,coverSavePath,title,labelList,videoBrief,codeSite,mode):
click(1440,140)
click(1730,350,button='right')
click(1440,250)
hotkey('ctrl','pgdn')
sleep(2.5+delay)
click(1120,800)
sleep(1+delay)
hotkey('shift','alt','s')
typewrite(videoSavePath)
sleep(0.5+delay)
press('enter')
hotkey('winleft','left')
click(570,191)
click(760,990)
sleep(0.5+delay)
click(1600,810)
click(1430,930)
press('tab')
click(580,955)
sleep(1+delay)
hotkey('winleft','left')
hotkey('shift','alt','s')
typewrite(coverSavePath)
sleep(0.5+delay)
press('enter')
sleep(1+delay)
click(1280,740)
press('down')
click(1210,930)
sleep(1+delay)
typewrite(['down','down','down','down',])
click(785,895)
press('home')
pyperclip.copy(title)
hotkey('ctrl','v')
click(1100,780)
typewrite(['down','down','down','down',])
click(1300,875)
for label in labelList:
pyperclip.copy(label)
hotkey('ctrl','v')
press('enter')
sleep(0.5)
click(1275,730)
hotkey('ctrl','end')
click(900,490)
pyperclip.copy(videoBrief)
hotkey('ctrl','v')
click(1170,760)
typewrite(['up' for n in range(18)])
click(650,459)
hotkey('ctrl','v')
hotkey('ctrl','end')
pyperclip.copy(codeSite)
hotkey('ctrl','v')
click(1234,815)
hotkey('ctrl','end')
if mode=='upload':
click(595,780)
elif mode=='test':
click(795,780)
def uploadVideo(mode='upload',delay=0):
startTimeStamp=time()-90
with open('VideoConfig.txt','r',encoding='utf-8')as f:
config = f.readlines()[1:13]
title=config[0].split('=')[1].strip()
videoLabels = config[1].split('=')[1].strip()
labelList=videoLabels.split()
if len(labelList)>4:
raise ValueError('标签最多4个 请重新编辑')
videoBriefTitle = config[2].split('=')[1].strip()
videoBrief = config[3].split('=')[1].strip()
codeSiteTitle=config[4].split('=')[1].strip()
codeSite=config[5].split('://')[1].strip()
if len(codeSite)>131:
raise ValueError('源码链接最多131个字符 请重新编辑')
coverSavePath=config[6].split('=')[1].strip()
fontPath=config[7].split('=')[1].strip()
videoSavePath=config[8].split('=')[1].strip()
titleSuffix=config[9].split('=')[1].strip()
videoUploadedPath=config[10].split('=')[1].strip()
videoFormat=config[11].split('=')[1].strip()
coverGener(title,fontPath,coverSavePath)
click(160,1060)
sleep(2+delay)
click(1802,1056)
click(1720,885)
uploadToBilibil(delay,videoSavePath,coverSavePath,title,labelList,videoBrief,codeSite,mode)
uploadToXigua(delay,videoSavePath,title,titleSuffix,coverSavePath,videoBriefTitle,videoBrief,codeSiteTitle,codeSite,mode)
for file in fnmatch.filter(os.listdir(videoSavePath), '*.'+videoFormat):
if startTimeStamp>os.path.getctime(videoSavePath+'\\'+file):
shutil.move(videoSavePath+'\\'+file,videoUploadedPath)
leastTimeStamp=time()
for i,file in enumerate(fnmatch.filter(os.listdir(videoUploadedPath), '*.'+videoFormat)):
fileTimeStamp=os.path.getctime(videoUploadedPath+'\\'+file)
if fileTimeStamp<=leastTimeStamp:
leastTimeStamp=fileTimeStamp
for i,file in enumerate(os.listdir(videoUploadedPath)):
if leastTimeStamp==os.path.getctime(videoUploadedPath+'\\'+file):
send2trash(videoUploadedPath+'\\'+file)
FAILSAFE=True
uploadVideo(mode='upload',delay=0)