bilibili批量取消关注

article/2025/6/7 22:50:03

目录

如何使用

​编辑

 代码


如何使用

使用谷歌浏览器,通过F12打开调式面板,找到下面的位置:

 代码

/*** 批量取消关注脚本* 自动遍历多页内容并取消所有关注*/// 配置常量
const CONFIG = {CLICK_DELAY: 250,        // 点击间隔时间(毫秒)PAGE_SWITCH_DELAY: 1000, // 页面切换等待时间(毫秒)PAGE_LOAD_DELAY: 2000,   // 页面加载等待时间(毫秒)MAX_RETRY_COUNT: 3       // 最大重试次数
};// 选择器常量
const SELECTORS = {FOLLOW_BUTTON: '.follow-btn__trigger',NEXT_PAGE_BUTTON: '#app > main > div.space-follow > div.follow-main > div.vui_pagenation.vui_pagenation--jump > div.vui_pagenation--btns > button:last-child',PREV_PAGE_BUTTON: '#app > main > div.space-follow > div.follow-main > div.vui_pagenation.vui_pagenation--btns > button:nth-child(1)'
};/*** 延迟函数* @param {number} ms - 延迟时间(毫秒)* @returns {Promise} Promise对象*/
function sleep(ms) {return new Promise(resolve => setTimeout(resolve, ms));
}/*** 检查元素是否存在且可见* @param {string} selector - CSS选择器* @returns {Element|null} 返回元素或null*/
function getVisibleElement(selector) {const element = document.querySelector(selector);if (!element) {console.warn(`未找到元素: ${selector}`);return null;}const style = window.getComputedStyle(element);if (style.display === 'none' || style.visibility === 'hidden' || element.disabled || element.offsetParent === null) {console.warn(`元素不可见或已禁用: ${selector}`);return null;}return element;
}/*** 安全点击元素* @param {Element} element - 要点击的元素* @param {string} description - 操作描述* @returns {boolean} 点击是否成功*/
function safeClick(element, description = '元素') {try {if (!element) {console.error(`无法点击${description}: 元素不存在`);return false;}element.click();console.log(`成功点击${description}`);return true;} catch (error) {console.error(`点击${description}时发生错误:`, error);return false;}
}/*** 获取当前页面的关注按钮列表* @returns {NodeList} 关注按钮列表*/
function getFollowButtons() {const buttons = document.querySelectorAll(SELECTORS.FOLLOW_BUTTON);console.log(`找到 ${buttons.length} 个关注按钮`);return buttons;
}/*** 取消当前页面的所有关注* @returns {Promise<number>} 返回成功取消关注的数量*/
async function unfollowCurrentPage() {const followButtons = getFollowButtons();let successCount = 0;if (followButtons.length === 0) {console.warn('当前页面没有找到关注按钮');return 0;}for (let i = 0; i < followButtons.length; i++) {const button = followButtons[i];// 检查按钮是否仍然存在且可点击if (button && button.offsetParent !== null) {if (safeClick(button, `第${i + 1}个关注按钮`)) {successCount++;await sleep(CONFIG.CLICK_DELAY);}} else {console.warn(`第${i + 1}个关注按钮已不可用`);}}console.log(`当前页面成功取消关注: ${successCount}/${followButtons.length}`);return successCount;
}/*** 切换到下一页* @returns {Promise<boolean>} 切换是否成功*/
async function goToNextPage() {console.log('准备切换到下一页...');// 先点击下一页按钮const nextButton = getVisibleElement(SELECTORS.NEXT_PAGE_BUTTON);if (!nextButton) {console.error('下一页按钮不可用,可能已到达最后一页');return false;}if (!safeClick(nextButton, '下一页按钮')) {return false;}await sleep(CONFIG.PAGE_SWITCH_DELAY);// 再点击上一页按钮(根据原代码逻辑)const prevButton = getVisibleElement(SELECTORS.PREV_PAGE_BUTTON);if (!prevButton) {console.error('上一页按钮不可用');return false;}if (!safeClick(prevButton, '上一页按钮')) {return false;}await sleep(CONFIG.PAGE_LOAD_DELAY);console.log('页面切换完成');return true;
}/*** 主函数 - 批量取消关注* @param {number} maxPages - 要处理的最大页数*/
async function batchUnfollow(maxPages = 1) {console.log(`开始批量取消关注,计划处理 ${maxPages} 页`);let totalUnfollowed = 0;let processedPages = 0;try {for (let currentPage = 0; currentPage < maxPages; currentPage++) {console.log(`\n=== 处理第 ${currentPage + 1} 页 ===`);// 取消当前页面的关注const unfollowedCount = await unfollowCurrentPage();totalUnfollowed += unfollowedCount;processedPages++;// 如果还有下一页需要处理if (currentPage < maxPages - 1) {const switchSuccess = await goToNextPage();if (!switchSuccess) {console.warn('无法切换到下一页,提前结束处理');break;}}}console.log(`\n=== 批量取消关注完成 ===`);console.log(`处理页数: ${processedPages}/${maxPages}`);console.log(`总计取消关注: ${totalUnfollowed} 个`);} catch (error) {console.error('批量取消关注过程中发生错误:', error);}
}// 使用示例
// 处理1页内容
batchUnfollow(1);// 如果要处理多页,可以这样调用:
// batchUnfollow(5); // 处理5页


http://www.hkcw.cn/article/drtQZRPYBL.shtml

相关文章

7.RV1126-OPENCV cvtColor 和 putText

一.cvtColor 1.作用 cvtColor 是 OPENCV 里面颜色转换的转换函数。能够实现 RGB 图像转换成灰度图、灰度图转换成 RGB 图像、RGB 转换成 HSV 等等 2.API CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn 0 ); 第一个参数&#xff1a;…

研发型企业如何面对源代码保密问题

在当今数字化时代&#xff0c;研发团队面临着数据安全和工作效率的双重挑战。技术成果和源代码不仅是企业的核心资产&#xff0c;更是企业竞争力的基石。然而&#xff0c;数据泄露的风险无处不在&#xff0c;从内部员工的无意失误到外部攻击者的恶意窃取&#xff0c;都可能给企…

BeeWorks:私有化即时通讯,筑牢企业信息安全防线

在数字化时代&#xff0c;即时通讯已成为企业日常运营中不可或缺的工具。然而&#xff0c;数据安全问题一直是企业使用即时通讯服务时的重要考量因素。BeeWorks即时通讯系统以其私有化部署模式&#xff0c;为企业提供了一个安全、可靠、自主可控的沟通平台。 私有化部署&#…

akka实践之应用的扩展性问题和actor模型

如何解决应用的扩展性问题 当一个应用需要处理海量并发请求时&#xff0c;传统的开发模式往往显得力不从心&#xff0c;为什么应用需要扩展性&#xff1f; 需求增长: 用户量激增&#xff0c;数据量爆炸式增长。资源限制: 服务器、带宽、存储等资源有限。复杂性增加: 代码逻辑…

Starrocks Full GC日志分析

GC日志样例&#xff1a; [2025-06-03T07:36:06.1770800] GC(227) Pause Full (G1 Evacuation Pause) [2025-06-03T07:36:06.1960800] GC(227) Phase 1: Mark live objects [2025-06-03T07:36:06.9480800] GC(227) Cleaned string and symbol table, strings: 47009 processed,…

mapbox高阶,生成并加载等时图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️Fill面图层样式1.4 ☘️symbol符号图层…

防火墙在OSI模型中的层级工作(2025)

1. 物理层&#xff08;L1&#xff09;& 数据链路层&#xff08;L2&#xff09; 传统防火墙&#xff1a;通常不处理L1/L2&#xff08;由交换机/网卡负责&#xff09;。 现代演进&#xff1a; MAC地址过滤&#xff1a;部分防火墙支持基于MAC地址的粗粒度策略&#xff08;如禁…

帝可得 - 运营管理APP

Android模拟器 本项目的App客户端部分已经由前端团队进行开发完成&#xff0c;并且以apk的方式提供出来&#xff0c;供我们测试使用&#xff0c;如果要运行apk&#xff0c;需要先安装安卓的模拟器。 可以选择国内的安卓模拟器产品&#xff0c;比如&#xff1a;网易mumu、雷电…

关于list集合排序的常见方法

目录 1、list.sort() 2、Collections.sort() 3、Stream.sorted() 4、进阶排序技巧 4.1 空值安全处理 4.2 多字段组合排序 4.3. 逆序 5、性能优化建议 5.1 并行流加速 5.2 原地排序 6、最佳实践 7、注意事项 前言 Java中对于集合的排序操作&#xff0c;分别为list.s…

自然语言处理(NLP)的系统学习路径规划

文章目录 一、基础准备阶段&#xff08;1-2个月&#xff09;1. 数学基础2. 编程基础3. 语言学基础 二、核心技术阶段&#xff08;3-4个月&#xff09;1. 经典NLP技术2. 深度学习模型3. 预训练模型入门 三、进阶实战阶段&#xff08;2-3个月&#xff09;1. 热门任务实战2. 大模型…

CSS3美化页面元素

1. 字体 <span>标签 字体样式⭐ 字体类型&#xff08;font-family&#xff09; 字体大小&#xff08;font-size&#xff09; 字体风格&#xff08;font-style&#xff09; 字体粗细&#xff08;font-weight&#xff09; 字体属性&#xff08;font&#xff09; 2. 文本 文…

便签软件哪个好用,最好用的免费便签软件介绍

在快节奏的工作和生活中&#xff0c;一款好用的便签软件能帮助我们高效记录灵感、管理待办事项&#xff0c;甚至成为个人生产力系统的核心工具。2025年&#xff0c;市面上涌现了许多优秀的免费便签软件&#xff0c;它们各具特色&#xff0c;能满足不同用户的需求。便签软件哪个…

如何轻松删除 Android 上的文件(3 种方法)

Android 手机是非常强大的设备&#xff0c;可让我们存储大量的个人数据&#xff0c;从照片和视频到应用程序和文档。然而&#xff0c;随着时间的推移&#xff0c;您的设备可能会因不再需要的文件而变得混乱。删除这些文件有助于释放空间并提高性能。在本指南中&#xff0c;我们…

鸿蒙简易版影视APP案例实战

目录 1. 案例效果 2. 资源初始化和资源文件 2.1. string.json (en_US) 2.2. string.json (zh_CN) 2.3. constants 3. 视频列表 3.1. 顶部导航 3.1.1. TobBar 组件 3.1.2. TopBar 数据源 3.2. 全部分类内容页面 3.2.1. 全部分类组件 3.2.2. 轮播图组件 3.2.3. 图片列…

对于python中“FileNotFoundError: [Errno 2] No such file or directory”的解决办法

写在前面 最近在使用 vscode 写代码 (python) 时发现使用相对路径读取文件以及写入文件时&#xff0c;想要直接在当前目录下读写一直提示没有该文件&#xff0c;需要返回根目录。并且使用 vscode 自带调试"F5"以及 Code Runner 扩展即右上角三角形都是如此。参考了许…

VS2022中配置Anaconda3环境和scikit-learn库

VS2022中配置Anaconda3环境和scikit-learn库 安装Anaconda安装scikit-learn库在VS2022中配置该环境 安装Anaconda 1.双击应用程序开始安装 2.点击Next 3.I Agree 4.Just Me 5.修改安装路径到D盘 6.没有选择自动配置环境变量&#xff0c;点击Install安装 7.安装完成 8.进…

Q:知识库-文档的搜索框逻辑是怎样的?

【回到目录】~~~~【回到问题集】 Q&#xff1a;知识库-文档的搜索框逻辑是怎样的? dify知识库的关键字检索响应速度很快,效果如上图 A&#xff1a;查看源代码&#xff0c;搜索逻辑是通过搜索框查看 document_segments.content字段满足条件的记录 , 程序逻辑参考 datasets_se…

Manus AI与多语言手写识别的创新革命:从技术突破到行业赋能

文章目录 一、Manus AI技术架构&#xff1a;从像素到语义的端到端进化1. 动态多尺度卷积网络&#xff08;Dynamic Multi-Scale CNN&#xff09;2. 跨语言注意力机制&#xff08;Cross-Lingual Attention&#xff09; 二、多语言挑战与突破&#xff1a;从数据到算法的全面创新1.…

【ISAQB大纲解读】LG 1-8:区分显性陈述和隐性假设(R1)

软件架构师&#xff1a; 应明确提出假设或先决条件&#xff0c;从而防止隐性假设 知道隐性假设可能会导致利益相关方之间的潜在误解 1. 应明确提出假设或先决条件&#xff0c;防止隐性假设 为什么重要&#xff1f; 隐性假设是架构风险的温床 例如&#xff1a;假设“所有服务都…

Dify-5:Web 前端架构

本文档提供了 Dify Web 前端架构的技术概述&#xff0c;包括核心组件、结构和关键技术。它解释了前端如何组织、组件如何通信以及国际化功能如何实现。 技术栈 Dify 的 Web 前端基于现代 JavaScript 技术栈构建&#xff1a; 框架&#xff1a;Next.js&#xff08;基于 React …