前言
适用需求:给自己的视频评论区回赞,包括折叠评论。
一、利用selenium模拟登录获取cookie
为什么要获取cookie?
在本地浏览器中存放着代表你个人身份的cookie信息,有了它就可以模拟已登录用户访问网站进行点赞。
cookie存在时效性,不同的网站不同类型的cookie的过期时间都可能不同。so,–>定期更新cookie
#获取cookie
def hq_cookie():
weba = webdriver.Chrome() #造个浏览器
weba.maximize_window() #最大化窗口
weba.get('b站网站')
weba.delete_all_cookies() #先删除所有cookie
time.sleep(50) #代码停下来50秒,等你登录
dictcookies = weba.get_cookies() #获取登录后的cookie(字典格式)
weba.quit() #关闭浏览器
return dictcookies #返回cookie
二、登录
接收 hq_cookie()返回的cookie后
去掉cookie字典–键(key)中的带有expiry的键值对,然后添加cookie到浏览器中进行登录。
注意:
在添加cookie前要先访问对应网站。
如果因为某些原因在第一步中50秒内你没有登录b站,导致没有得到cookie信息那么就需要重新登录(重新执行hq_cookie函数)。
#首次登录
def dl(cookies):
#登录
url="https://www.bilibili.com"
webd.get(url)
for cookie in cookies:
if 'expiry' in cookie:
del cookie['expiry']
for cookie in cookies:
webd.add_cookie(cookie)
webd.get(url)
#登录失败后重新登录
def dl2(cookies):
webd.close() #关闭多余窗口
webd.switch_to.window(webd.window_handles[-1])
for cookie in cookies:
if 'expiry' in cookie:
del cookie['expiry']
for cookie in cookies:
webd.add_cookie(cookie)
webd.refresh() #刷新页面,进入登录状态
三、点赞
用一个列表获取存放的你所有要访问的视频链接,如果没有输入链接会直接结束程序。
访问到视频网站后(利用xpath定位元素)打开评论区所有评论后开始点赞,点赞过程中发现未登录会中断点赞函数回到第一步进行重新登录。
点赞过程中注意设置间隔时间。
#开始点赞
def jxdl():
u = []
# 使用循环来输入链接
while True:
link = input("请输入链接(输入'q'退出):")
if link == 'q':
break
u.append(link)
print("输入成功:", u)
if not u:
print("无链接输入,程序结束!")
for url in u:
#访问视频后切窗口
webd.execute_script(f"window.open('{url}', 'new_window')")
webd.switch_to.window(webd.window_handles[-1])
time.sleep(5)
#打开折叠评论
mor = webd.find_elements(By.XPATH, "//span[@class='view-more-btn']")
print("需要打开的评论数量",len(mor))
#通过循环来遍历所有元素进行点击操作打开评论区
for i in range(0, len(mor)):
element = mor[i]
# element是一个div类型元素,不能直接element.click(),要用JavaScript模拟点击
webd.execute_script("arguments[0].click();", element)
#休息几秒
sleep_time = random.uniform(4, 6)
time.sleep(sleep_time)
print("准备点赞")
time.sleep(3)
# svg-icon like use-color like-icon
#获取所有sub-like评论点赞键
z = webd.find_elements(By.XPATH, "//i[@class='svg-icon like use-color sub-like-icon']")
#获取首评评论点赞键
ss = webd.find_elements(By.XPATH, "//i[@class='svg-icon like use-color like-icon']")
s = 1
print("首评点赞:", len(ss))
print("回复评论点赞:", len(z))
if ss:
for i in range(0, len(ss)):
# 挨个对列表中的元素进行点击操作
element = ss[i]
# element是一个div类型元素,不能直接element.click(),要用JavaScript模拟点击
webd.execute_script("arguments[0].click();", element)
sleep_time = random.uniform(4, 6)
time.sleep(sleep_time)
if s == 1: #如果之前登录了有cookie信息且cookie信息有效那么就会循环多次,s的值不等于1
k = webd.find_elements(By.XPATH, "//div[@class='login-tab-item active-tab']")
if k:
print("请先登录")
cookies = hq_cookie()
dl2(cookies)
jxdl()
return
s = s + 1
time.sleep(1)
for i in range(0, len(z)):
# 挨个对列表中的元素进行点击操作
element = z[i]
# element是一个div类型元素,不能直接element.click(),要用JavaScript模拟点击
webd.execute_script("arguments[0].click();", element)
sleep_time = random.uniform(4, 6)
time.sleep(sleep_time)
webd.close()
webd.switch_to.window(webd.window_handles[-1])
print("该视频点赞结束")