前提
此次是对之前版本的更新,时隔数日在摸鱼期间完善了这一次的更新,首先理了一下之前版本的存留问题,然后也想了几个后续可以优化和可处理的问题
- 优化点赞功能:准备用显示等待获取点赞图标,对已点赞的视频进行处理
- 多个账号刷评:提前准备好大量账号的Cookie,刷评操作完成后切换用户
- 其余内容:投币功能实现,关注功能实现,转发功能实现,收藏功能实现
实现思路
- 点赞功能使用获取集合的方式判断点赞图标是否存在
- 对于多个用户登录,我把整体的代码进行一个封装,后续获取多个用户的cookie集合后直接用循环遍历即可完成
- 投币、关注功能存在多个的状态,实现思路与点赞类似
- 由于基于Selenium,b站当前Web端的转发只适用于个人空间的转发
# @Time : 2023/4/1 14:41
# @auth : 都是好事
# @Email :
# @Content : bli_plus.py
import time
from selenium.webdriver.common.by import By
# 显式等待模块
from selenium.webdriver.support.ui import WebDriverWait
# 显式等待条件
from selenium.webdriver.support import expected_conditions as EC
from anyUser import My_webApi
# 调用封装的通用类
anp = My_webApi.Any_Api()
wb = anp.getWeb(htp="https://www.bilibili.com/")
# ---------------------------------------------------------------------------------------------
class bili:
def __init__(self, web, cookies):
self.wb = web
self.cookiePath = cookies
self.wbw = WebDriverWait(self.wb, 10, 0.5)
def login(self):
# 使用获取的cookie登录
anp.set_cookies(self.wb, self.cookiePath)
# 等待登录主页刷新
time.sleep(3)
self.wb.refresh()
def user(self, uid):
# 查询用户
sea = self.wb.find_element(By.XPATH, '//input[@class="nav-search-input"]')
sea.click()
sea.send_keys(uid)
sea_but = self.wb.find_element(By.XPATH, '//div[@class="nav-search-btn"]')
sea_but.click()
# 进入用户页面
anp.now_win(self.wb)
time.sleep(3)
user = self.wb.find_elements(By.XPATH,
'//img[@data-src="https://i1.hdslb.com/bfs/face/96d230df1219334fcbc4531b524a674d8151b2f8.jpg@240w_240h_1c_1s.webp"]')
user[0].click()
def void(self):
# 进入投稿页面
anp.now_win(self.wb)
v_list = self.wb.find_element(By.XPATH, '//div[@class="n-tab-links"]/a[@href="/34980281/video"]')
v_list.click()
# 获取用户主页面
window = self.wb.current_window_handle
# 遍历视频,发送评论
# 设置显式等待
viods = self.wb.find_elements(By.XPATH, '//li[@class="small-item fakeDanmu-item"]/a[@class="cover"]')
for i in viods:
i.click()
anp.now_win(self.wb)
# 评论
txta = self.wbw.until(
EC.presence_of_element_located((By.XPATH, '//textarea[@class="reply-box-textarea"]')))
txta.send_keys('up主你做的真好')
fb_but = self.wb.find_element(By.XPATH, '//div[@class="send-text"]')
fb_but.click()
# 弹幕
danmu = self.wbw.until(
EC.presence_of_element_located((By.XPATH, '//input[@placeholder="发个友善的弹幕见证当下"]')))
danmu.send_keys('每日一遍')
next_btn = self.wb.find_element(By.XPATH, '//div[@class="bui-area bui-button-blue"]')
self.wb.execute_script("arguments[0].click();", next_btn)
# 投币
coin = self.wb.find_elements(By.XPATH, '//span[@class="coin"]')
if len(coin) != 0:
coin[0].click()
self.wb.find_element(By.XPATH, '//div[@class="coin-bottom"]//span[@class="bi-btn"]').click()
# 点赞
like = self.wb.find_elements(By.XPATH, '//span[@class="like"]')
if len(like) != 0:
like[0].click()
# 回到用户主页面
self.wb.switch_to.window(window)
bl_p = bili(web=wb, cookies='cookie的地址')
bl_p.login()
bl_p.user('UP主的UID')
bl_p.void()
后续更新: 1.实现优化对大量用户cookie集的获取和遍历 2.一次运行对多个UP主的视频进行操作,优化执行效率