代码备份如下:
#! /usr/bin/env python3
# -*- coding: UTF-8 -*-
# bilibili 网站自动改命脚本
# 1031 是 81天
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import argparse
import time
# /html/body/section/main/div/div[2]/div/div[1]/div/p
# div.editor-content > div > p
DRIVER_PATH = "/Users/paul/code/myEnvironment/chromedriver" # /Users/paul/code/myEnvironment/chromedriver # ./driver/chromedriver.exe
# https://member.bilibili.com/platform/upload-manager/article?keyword=1104&page=1
CONTROL_PAGE = 'https://member.bilibili.com/platform/upload-manager/article?keyword={videoTitle}&page=1'
dayTitle = '考研第{day}天'
class Driver:
def __init__(self):
# 初始化驱动
self.driver = None
self._init_driver()
def _init_driver(self):
if self.driver:
return
option = webdriver.ChromeOptions()
option.add_experimental_option('debuggerAddress', '127.0.0.1:9222')
option.add_argument("--disable-blink-features")
option.add_argument("--disable-blink-features=AutomationControlled")
self.driver = webdriver.Chrome(options=option, executable_path=DRIVER_PATH) # /Users/paul/code/myEnvironment/chromedriver
def changeName(self, videoTitle, day):
print("changeName start")
videoSearchUrl = CONTROL_PAGE.format(videoTitle=videoTitle)
print("you are going change vid by url: ")
print(videoSearchUrl)
self.driver.get(videoSearchUrl)
# 编辑按钮:
# #cc-body > div.upload-manage.cc-content-body > div.article-v2-wrap.content > div.is-article.cc-article-wrp > div > div.article-list_wrap > div > div > div > div > div.meta-view > a:nth-child(1)
editBtnCssSelector = '#cc-body > div.upload-manage.cc-content-body > div.article-v2-wrap.content > div.is-article.cc-article-wrp > div > div.article-list_wrap > div > div > div > div > div.meta-view > a:nth-child(1)'
self.driver.implicitly_wait(1)
print("现在在页面:" + self.driver.current_url)
editBtn = self.driver.find_element_by_css_selector(editBtnCssSelector)
editBtn.click()
# wait
time.sleep(3)
print("sleep done")
self.driver.switch_to.frame('videoUpload')
print("switch_to_frame done")
self.driver.implicitly_wait(1)
# 标题框
titleCssSelector = '#app > div.upload-v2-container > div.upload-v2-step2-container > div.file-content-v2-container > div.normal-v2-container > div.content-title-v2-container > div.content-title-v2-input-wrp > div > div > input'
titleXpath = '//*[@id="app"]/div[2]/div[2]/div[2]/div[1]/div[6]/div[2]/div/div/input'
titleInput = self.driver.find_element_by_css_selector(titleCssSelector)
print("ready to send_keys")
titleInput.clear()
# 通过万能的js直接定位到元素然后将 input 元素的value值清空; test fail
# self.driver.execute_script("arguments[0].value = '';", titleInput)
# 通过双击清理
ActionChains(self.driver).double_click(titleInput).perform()
titleInput.send_keys(dayTitle.format(day=day))
self.driver.implicitly_wait(1)
# 简介框
# #app > div.upload-v2-container > div.upload-v2-step2-container > div.file-content-v2-container > div.normal-v2-container > div.content-desc-v2-container > div.content-desc-v2-text-wrp > div > div.editor.ql-container > div.ql-editor
introBoxCssSelector = '#app > div.upload-v2-container > div.upload-v2-step2-container > div.file-content-v2-container > div.normal-v2-container > div.content-desc-v2-container > div.content-desc-v2-text-wrp > div > div.editor.ql-container > div.ql-editor'
introBox = self.driver.find_element_by_css_selector(introBoxCssSelector)
introBox.clear()
introText = '我2021年在电子科大读计算机,我是个普通人。这是我19年考研的部分录像,从19年8月开始(开始没录),每天10几个小时,我会在晚上剪成三分钟,配上毛不易的《平凡的一天》或者其他音乐。现在2021年了,又是考研的日子,我开始整理自己考研的视频,这可能对你并没有什么价值,但希望你能知道,经历比结果重要,起码当时我是抱着这个心态的:人生在于当下的经历而不在于离开时的成就。我的微信公众号是:非正经研究生;希望看到视频的你,找到自己的意义。'
introBox.send_keys(introText)
# 粉丝动态
fansInputCssSelector = '#app > div.upload-v2-container > div.upload-v2-step2-container > div.file-content-v2-container > div.fans-dynamic-v2-container > div.fans-dynamic-v2-input-wrp > div > div.editor.ql-container > div.ql-editor'
fansInput = self.driver.find_element_by_css_selector(fansInputCssSelector)
fansInput.clear()
fansText = '#考研##研究生##奋斗##正能量##大学生#'
fansInput.send_keys(fansText)
parser = argparse.ArgumentParser(description="自动改视频简介内容的脚本而已")
parser.add_argument('videoTitle', help='哪一个视频需要改内容')
parser.add_argument('day', help='这是你考研的第多少天')
arg = parser.parse_args()
if __name__ == '__main__':
print("in main")
work = Driver()
work.changeName(arg.videoTitle, arg.day)
print("end main")



