微博清理僵尸粉
1.选择chrome或者firefox浏览器
2.登陆微博账号
3.chrome右键点检查,选择console
firefox右键点检查,选择控制台
4.粘贴下面代码到console或者控制台并且回车
let removeTargetFans = false; /*是否删除符合条件的粉丝,默认关闭*/let deepSearchMode =false; /*是否开启深度清理模式*/
let ignoreLikes = true; /*是否无视用户最近点赞*/
let minDayCount = 180; /*最小不活跃天数*/let fansMinCount = 2; /*最小粉丝数*/
let weiboMinCount = 3; /*最小微博数*/
let startPage = 1; /*开始页码*/
let totalCount = 0;let checkIsFromRecommended = true; /*是否检查通过推荐关注*/
let checkIsInactive = true; /*是否检查不活跃用户*/
let checkFansOrWeibo = false; /*是否只判断粉丝数或微博数*/
let checkIsFollowing =true; /*是否检查相互关注*/
let checkIsDefaultIcon = false; /*是否检查默认头像*/
let checkIsNormalFollowed = false; /*是否检查关注来源*/let isError = false;
let isRunning = false;
let userID = 0;
let zeroFanPageCount = 0;function clearLog()
{let logger = document.querySelector("p.logger");logger.innerHTML = "";
}function logError(msg){let logger = document.querySelector("p.logger");let parent = logger.parentElement;logger.innerHTML +="<span style='color: darkred; font-weight:bold;'>" + msg + "</span><br>";parent.scrollTop = parent.scrollHeight;
}function logSuccessMsg(msg){let logger = document.querySelector("p.logger");let parent = logger.parentElement;logger.innerHTML +="<pre style='tab-size: 15em; color: forestgreen;'>" + msg + "</pre>";parent.scrollTop = parent.scrollHeight;
}function logImportantMsg(msg)
{let logger = document.querySelector("p.logger");let parent = logger.parentElement;logger.innerHTML +="<pre style='font-weight:bold'>" + msg + "</pre>";parent.scrollTop = parent.scrollHeight;
}function logMsg(msg){let logger = document.querySelector("p.logger");let parent = logger.parentElement;logger.innerHTML +="<pre style='tab-size: 15em;'>" + msg + "</pre>";parent.scrollTop = parent.scrollHeight;
}async function removeFanMainFunc() {const delay = ms => new Promise(res => setTimeout(res, ms));const minute = 1000 * 60;const hour = minute * 60;const day = hour * 24;clearTimeout();isError = false;let startIndex = 0;let pageIndex = startPage;while(true) {if(!isRunning){if (removeTargetFans)logError("用户退出程序。总计清理了 " + totalCount + " 个疑似僵尸粉");elselogError("用户退出程序。总计发现了 " + totalCount + " 个疑似僵尸粉");break;}await delay(300);let fanListJson = await fetch('https://weibo.com/ajax/friendships/friends?relate=fans&count=20&type=fans&fansSortType=followTime' +'&page=' + pageIndex +'&uid=' + userID,{method: "GET",}).then(response => response.json()).catch((e) => {});if (fanListJson == null || fanListJson.ok != 1 || fanListJson['users'].length === 0) {fanListJson = await fetch('https://weibo.com/ajax/friendships/friends?relate=fans&count=20&type=fans&fansSortType=followTime' +'&page=' + pageIndex +'&uid=' + userID,{method: "GET",}).then(response => response.json()).catch((e) => {});if (fanListJson == null || fanListJson.ok != 1) {if (removeTargetFans)logError("请求异常,退出程序。总计清理了 " + totalCount + " 个疑似僵尸粉");elselogError("请求异常,退出程序。总计发现了 " + totalCount + " 个疑似僵尸粉");break;}}let fans = fanListJson['users'];let count = 0;for (let i = startIndex; i < fans.length; i++) {if(!isRunning){if (removeTargetFans)logError("用户退出程序。总计清理了 " + totalCount + " 个疑似僵尸粉");elselogError("用户退出程序。总计发现了 " + totalCount + " 个疑似僵尸粉");return;}let isFromRecommended = false;let isInactive = false;let isFollowing = false;let isDefaultIcon = false;let isNormalFollowed = false;let isIrrelevant = false;let fansCount, weiboCount;/*关注来源*/let originSrc = fans[i]['origin_source_info'];isNormalFollowed = originSrc != null && originSrc['text'] !== "兴趣推荐" && originSrc['text'] !== "微博推荐";/*是否为铁粉*/if(fans[i].fansIcon != null){if(fans[i].fansIcon == "loyal_fans")continue;}/*是否为非推荐的会员*/if (isNormalFollowed && (fans[i]['mbtype'] === 12))continue;/*关注来源是否为兴趣推荐*/if (checkIsFromRecommended) {isFromRecommended = originSrc != null && originSrc['text'] === "兴趣推荐";}let fanID = fans[i]['id'];let fanName = fans[i]['name'];/*粉丝数与微博数*/if (checkIsInactive) {fansCount = fans[i]['followers_count'];weiboCount = fans[i]['statuses_count'];if (checkFansOrWeibo)isInactive = fansCount < fansMinCount || weiboCount < weiboMinCount;elseisInactive = fansCount < fansMinCount && weiboCount < weiboMinCount || weiboCount === 0 || fansCount === 0;}/*是否为默认头像*/if (checkIsDefaultIcon) {let icon = fans[i]['avatar_hd'];isDefaultIcon = icon != null && icon.includes("/default/images/default_avatar_");}/*是否互相关注*/if (checkIsFollowing) {isFollowing = fans[i]['following'];}let isZombie = false;if (!isFollowing)if (!checkIsNormalFollowed || (checkIsNormalFollowed && !isNormalFollowed))if (isDefaultIcon || isFromRecommended || isInactive || isDefaultIcon || (deepSearchMode && weiboCount === 0))isZombie = true;/*深度检查*/if (deepSearchMode && !isFollowing && !isZombie) {await delay(600);let weiboJson = await fetch('https://weibo.com/ajax/statuses/mymblog?page=1&feature=0&uid=' + fanID, {method: "GET",}).then(response => response.json()).catch((e) => {});if (weiboJson == null || weiboJson.ok != 1) {await delay(800);weiboJson = await fetch('https://weibo.com/ajax/statuses/mymblog?page=1&feature=0&uid=' + fanID, {method: "GET",}).then(response => response.json()).catch((e) => {});if (weiboJson == null || weiboJson.ok != 1) {logError(fanName + "主页请求失败,跳过检查");continue;}}let weiboList = weiboJson.data['list'];let invalidWeiboCount = 0;let validWeiboCount = 0;let currDate = Date.now();for (let index = 0; index < weiboList.length; index++) {let currWeibo = weiboList[index];let weiboSrc = currWeibo['source'];if(weiboSrc != null && weiboSrc.includes("生日动态"))continue;if (weiboSrc != null && (weiboSrc.includes("渔场") ||weiboSrc.includes("活动") || weiboSrc.includes("森林") || weiboSrc.includes("微博积分") ||weiboSrc.includes("支付宝") || weiboSrc.includes("淘宝") || weiboSrc.includes("芭芭农场") ||weiboSrc.includes("任务") || weiboSrc.includes("签到") || weiboSrc.includes("新浪游戏") ||weiboSrc.includes("微博游戏") || weiboSrc.includes("红包") || weiboSrc.includes("微博会员") ||weiboSrc.includes("微博运动") || weiboSrc.includes("熊猫守护者") || weiboSrc.includes("点淘"))) {invalidWeiboCount++;continue;}if (ignoreLikes && currWeibo['title'] != null && currWeibo['title']['text'].includes("赞"))continue;let createTime = currWeibo['created_at'];if (currWeibo['retweeted_status'] != null) {createTime = currWeibo['retweeted_status']['created_at'];}if (Math.round((currDate - new Date(createTime)) / day) <= minDayCount) {validWeiboCount++;}invalidWeiboCount--;}if (invalidWeiboCount > 3) {isIrrelevant = true;isZombie = true;}if (validWeiboCount < 3) {isInactive = true;isZombie = true;}}await delay(300);if (isZombie) {let reason = "原因: ";if (isFromRecommended)reason += " 兴趣推荐";if (isInactive)reason += " 不活跃用户";if (isIrrelevant)reason += " 不相关用户";if (isDefaultIcon)reason += " 默认头像";if (removeTargetFans) {let fData = new FormData();fData.append("uid", fanID);fData.append("_t", "0");const json = await fetch('/aj/f/remove?ajwvr=6&__rnd=' + Math.round(new Date().getTime()), {method: "POST",body: fData}).then(response => response.json()).catch((e) => {});if (json != null && json.code == 100000) {logSuccessMsg(fanName + "\t删除成功 " + reason);count++;totalCount++;} elselogError(fanName + "\t删除失败 ");} else {logMsg(fanName + "\t疑似僵尸粉 " + reason);count++;totalCount++;}}}if (fans.length > 0) {startIndex = 0;zeroFanPageCount = 0;if (removeTargetFans) {logImportantMsg("第 " + pageIndex + " 页删除了 " + count + " 个粉丝");if (count > 0) {startIndex = fans.length - count;if (startIndex < 0) startIndex = 0;} else {pageIndex++;}} else {logImportantMsg("第 " + pageIndex + " 页发现了 " + count + " 个疑似僵尸粉");pageIndex++;}} else {if(zeroFanPageCount < 5){zeroFanPageCount++;pageIndex++;}else {if (removeTargetFans)logError("已到达粉丝列表上限,退出程序。总计清理了 " + totalCount + " 个疑似僵尸粉");elselogError("已到达粉丝列表上限,退出程序。总计发现了 " + totalCount + " 个疑似僵尸粉");break;}}}StopFunc();
}function RemoveFans(startIndex){let p = new Promise(function(){removeFanMainFunc(startIndex)});
}let InitParameters = ()=>
{checkIsFromRecommended = document.body.querySelector("input#checkIsFromRecommended").checked;checkIsFollowing = document.body.querySelector("input#checkIsFollowing").checked;checkIsNormalFollowed = document.body.querySelector("input#checkIsNormalFollowed").checked;checkIsDefaultIcon= document.body.querySelector("input#checkIsDefaultIcon").checked;checkIsInactive = document.body.querySelector("input#checkIsInactive").checked;checkFansOrWeibo = document.body.querySelector("input#checkFansOrWeibo").checked;fansMinCount = parseInt(document.body.querySelector("input#fansMinCount").value);weiboMinCount = parseInt(document.body.querySelector("input#weiboMinCount").value);deepSearchMode = document.body.querySelector("input#deepSearchMode").checked;ignoreLikes = document.body.querySelector("input#ignoreLikes").checked;minDayCount = parseInt(document.body.querySelector("input#minDayCount").value);startPage = parseInt(document.body.querySelector("input#startPage").value);
};let StartCheckFans = ()=>
{SetMode("running");InitParameters();clearLog();totalCount = 0;removeTargetFans = false;isRunning = true;RemoveFans(0);
};let StartRemoveFans = ()=>
{SetMode("running");InitParameters();clearLog();totalCount = 0;removeTargetFans = true;isRunning = true;RemoveFans(0);
};let StopFunc = ()=>
{SetMode("ready");clearInterval();clearTimeout();isRunning = false;
};let SetDeepSearchParam = ()=>{let disable = document.body.querySelector("input#deepSearchMode").checked === false;let params = document.body.querySelectorAll("input.DeepSearchParam");for(let i = 0; i < params.length; i++)params[i].disabled = disable;
};let SetMode = (mode) =>{let params = document.querySelector("div.parameter").querySelectorAll("input");let readyPanel = document.querySelector("div.ready");let runningPanel = document.querySelector("div.running");if(mode === "running"){for(let i = 0; i < params.length; i++) params[i].disabled = true;readyPanel.style.display = "none";runningPanel.style.display = "";}else if(mode === "ready"){for(let i = 0; i < params.length; i++) params[i].disabled = false;runningPanel.style.display = "none";readyPanel.style.display = "";}
};let ReplaceHTML = ()=>
{let list = document.querySelector("div.woo-box-flex.woo-tab-nav")?.querySelectorAll("a");let href = document.location.href;if(list == null || list.length !== 5) {if(document.location.href.includes("https://weibo.com/u/")){userID = document.location.href.replace("https://weibo.com/u/", "");let numIndex = 0;for(numIndex = 0; numIndex < userID.length; numIndex++){if(userID[numIndex] < '0' || userID[numIndex] > '9')break;}userID = userID.slice(0, numIndex);}else {console.error("无法找到用户id,请打开微博主页再运行代码");return;}}else{userID = list[4].href.replace("https://weibo.com/u/", "");href = "https://weibo.com/u/page/follow/"+ userID +"?relate=fans";}document.head.innerHTML = '<meta charset="UTF-8"><title>一碗僵尸粉</title>';let body = '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><script src="RemoveZombiesUI.js"></script></head><body><div class="left" style="position: fixed; display: flex; flex-direction: column;top:0; left:0; bottom:0; width:500px; background-color: burlywood;"><h1 style="text-align:center; margin: 10px;">一碗僵尸粉<span style="font-size: 20px;">v2023.10</span></h1><div class="parameter"><h3>快速清粉参数</h3><table style="width: 100%; font-size: 15px;"><tr><td><input id="checkIsFromRecommended" type="checkbox" style="height: 15px; width: 15px;" checked>清除兴趣推荐用户</td><td><input id="checkIsFollowing" type="checkbox" style="height: 15px; width: 15px;" checked>排除相互关注</td><td><input id="checkIsNormalFollowed" type="checkbox" style="height: 15px; width: 15px;">只检查通过推荐关注</td></tr><tr style="height: 10px;"></tr><tr><td rowspan="2"><input id="checkIsInactive" type="checkbox" style="height: 15px; width: 15px;" checked>清除不活跃用户</td><td> 最低粉丝数<input id="fansMinCount" type="number" style="height: 15px; width: 60px;" min="0" value="2"></td><td rowspan="2"><input id="checkFansOrWeibo" type="checkbox" style="height: 15px; width: 15px;">满足任一条件即清除</td></tr><tr><td> 最低微博数<input id="weiboMinCount" type="number" style="height: 15px; width: 60px;" min="0" value="3"></td></tr><tr><td><input id="checkIsDefaultIcon" type="checkbox" style="height: 15px; width: 15px;">清除默认头像用户</td></tr></table><h3>深度清粉参数</h3><table style="width: 100%; font-size: 15px;"><tr><td><input id="deepSearchMode" type="checkbox" style="height: 15px; width: 15px;" οnchange="SetDeepSearchParam();">开启深度清粉</td><td> 最小不活跃天数:<input class="DeepSearchParam" id="minDayCount" type="number" style="height: 15px; width: 40px;" min="0" value="365" disabled></td><td><input class="DeepSearchParam" id="ignoreLikes" type="checkbox" style="height: 15px; width: 15px;" checked disabled>无视用户最近点赞</td></tr></table><h3>页码</h3><table style="width: 100%; font-size: 15px;"><tr><td> 开始页码:<input id="startPage" type="number" style="height: 15px; width: 40px;" min="0" value="1"></td></tr></table></div><div class="ready"><button style="position: relative; height: 45px; width:48%; font-size: 16px; margin: 4px 2px;" οnclick="StartRemoveFans();">清粉</button><button style="position: relative; height: 45px; width:48%; font-size: 16px; margin: 4px 2px;" οnclick="StartCheckFans();">检测</button></div><div class="running" style="display: none"><button style="position: relative; height: 45px; width:98%; font-size: 16px; margin: 4px 2px;" οnclick="StopFunc();">停止</button></div><div style="position: relative; margin: 4px 2px; flex-grow: 1; width: 100%; background-color: azure; overflow-y: scroll;"><p class="logger"></p></div><div style="position: absolute; bottom: 0px; height: 1px; width:100%; background-color: black"></div></div><div style="position: fixed; top:0; left: 500px; bottom: 0; right: 0;"><iframe class="web" src="" sandbox="allow-same-origin allow-scripts" style="width:100%; height:100%;"></iframe></div></body></html>';document.body.innerHTML = body.replaceAll('ο', 'o');let iframe = document.body.querySelector('iframe.web');iframe.src = href;iframe.onload=()=>{ iframe.contentDocument.body.querySelector("div[node-type=outer]")?.remove(); }
}ReplaceHTML();
相关文章:
微博清理僵尸粉
1.选择chrome或者firefox浏览器 2.登陆微博账号 3.chrome右键点检查,选择console firefox右键点检查,选择控制台 4.粘贴下面代码到console或者控制台并且回车 let removeTargetFans false; /*是否删除符合条件的粉丝,默认关闭*/let dee…...
创建React Native的第一个hello world工程
创建React Native的第一个hello world工程 需要安装好node、npm环境 如果之前没有安装过react-native-cli脚手架的,可以按照下述步骤直接安装。如果已经安装过的,但是在使用这个脚手架初始化工程的时候遇到下述报错的话 cli.init(root, projectname);…...
基础课3——自然语言处理的应用
自然语言处理是一种将人类语言转换为机器语言,以实现人机交互的技术。应用非常广泛,例如: 人机交互:自然语言处理技术可以应用于人机交互,让机器能够理解和运用人类语言,从而实现更加智能化的交互体验。 机…...
理解 Git 的三个工作区:工作区、暂存区和版本库
文章目录 创建 Git 本地仓库配置Git认识⼯作区、暂存区、版本库添加⽂件--场景查看 .git ⽂件添加⽂件--场景⼆ 创建 Git 本地仓库 要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。创建⼀个 Gi…...
web前端基础训练-----创建用户反馈表单
1,实验代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>用户反馈表单</title></head><body><form><fieldset><h1>用户反馈</h1><hr/><h4>亲爱的用…...
Scrum 敏捷管理流程图及敏捷管理工具
敏捷开发中的Scrum流程通常可以用一个简单的流程图来表示,以便更清晰地展示Scrum框架的各个阶段和活动。以下是一个常见的Scrum流程图示例: 转自:Leangoo.com 免费敏捷工具 这个流程图涵盖了Scrum框架的主要阶段和活动,其中包括…...
Android Handler/Looper视角看UI线程的原理
概述 Handler/Looper机制是android系统非重要且基础的机制,即使在rtos或者linux操作系统上开发应用框架时,也经常借鉴这个机制。通过该机制机制可以让一个线程循环处理事件,事件处理逻辑即在Handler的handleMessge种。本文建议android8.1源码…...
【网络】网络入门
网络入门 一、网络发展二、网络协议初识1、认识"协议"2、协议分层3、OSI七层模型4、TCP/IP五层(或四层)模型 三、网络传输基本流程1、同局域网的两台主机通信2、跨网络的两台主机通信 四、网络中的地址管理1、IP地址2、认识MAC地址 一、网络发展 独立模式:…...
GO-实现简单文本格式 文本字体颜色、大小、突出
毫无疑问GO的生态就是一坨大便。老子英文水平小学啊。 实现简单文本格式 文本字体颜色、大小、突出显示等。 创建要给docx文件容器【我估算的】 doc : document.New() defer doc.Close() doc.SaveToFile("simple.docx") 把容器保存为文件 设置标题 创建自然段…...
铅华洗尽,粉黛不施,人工智能AI基于ProPainter技术去除图片以及视频水印(Python3.10)
视频以及图片修复技术是一项具有挑战性的AI视觉任务,它涉及在视频或者图片序列中填补缺失或损坏的区域,同时保持空间和时间的连贯性。该技术在视频补全、对象移除、视频恢复等领域有广泛应用。近年来,两种突出的方案在视频修复中崭露头角&…...
latex,不带行号的algorithm
\usepackage{algorithm,algorithmic}\begin{algorithm} \caption{The Example Algorithm} \label{alg123} \begin{algorithmic} \STATE{\textbf{Input:} ...} \STATE{\textbf{Output:} ...} \IF{...} \STATE{...} \ENDIF \RETURN{...} \end{algorithmic} \end{algorithm}...
RocketMQ高性能核心原理与源码架构剖析
文章目录 一、源码环境搭建主要功能模块源码启动服务启动nameServer启动Broker发送消息消费消息 二、源码热身阶段NameServer的启动过程关注重点源码重点 Broker服务启动过程关注重点源码重点 Netty服务注册框架关注重点源码重点关于RocketMQ的同步结果推送与异步结果推送 Brok…...
MATLAB中zp2tf函数用法
目录 语法 说明 示例 质点弹簧系统的传递函数 zp2tf函数的功能是将零极点增益滤波器参数转换为传递函数形式。。 语法 [b,a] zp2tf(z,p,k) 说明 [b, a] zp2tf(z, p, k) 将一个分解的传递函数表示方式转换。 将单输入/多输出(SIMO)系统的多输出…...
解决:uniapp项目中调用小程序的chooseAddress() API失效
目录 问题描述 解决方案 问题描述 使用 Hbuilder X 编辑器和 uni-app 框架开发小程序项目,在调用小程序提供的 uni.chooseAddress() API实现选择收货地址的功能时,点击选择收货地址没有反应,获取不到用户收货地址,API失效了 …...
2023 项目组总结(待完善)
2023 项目组总结 目录概述需求: 设计思路实现思路分析1.JA项目2.XC项目3.XL 项目4.tydic 项目 总结 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better re…...
Chrome浏览器 键盘快捷键整理
名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 〇、前言一、常用快捷键二、分类型快捷键表(…...
【JAVA】集合与背后的逻辑框架,包装类,List,Map,Set,静态内部类
❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 collectionCollection创建collection使用泛型collection方法 Map 接口Map的存储结构HashMap和Tr…...
mac电脑版数字图像处理软件:ACDSee Photo Studio 9最新 for Mac
ACDSee Photo Studio 9是一款由ACD Systems开发的功能强大的照片管理和编辑软件,专为Mac用户提供一站式解决方案,方便用户轻松浏览、管理和编辑照片。该软件提供了许多实用的工具和功能,包括高效的导入和排序工具、强大的编辑工具、智能组织和…...
酷开系统 | 酷开科技让你放肆嗨唱,聆听内心最真实的声音
在这个喧嚣的城市里,每个人都像是一座孤岛,漂浮在茫茫人海之中,我们总是忙于奔波在各种琐事之间,渐渐忘记了内心深处的声音,我们压抑自己的情感,害怕被误解、被批评,然而真正的我们,…...
PC电脑 VMware安装的linux CentOs7如何扩容磁盘?
一、VM中进行扩容设置 必须要关闭当前CentOS,不然扩展按钮是灰色的。 输入值必须大于当前磁盘容量。然后点击扩展,等待扩展完成会提示一个弹框,点击确定,继续确定。 二、操作CentOS扩容——磁盘分区 第一步设置完成。那就启动 …...
redis极速的奥秘
文章目录 1.基于内存存储实现2.高效的数据结构3.合理的数据编码4.合理的线程模型5. 虚拟内存机制实现原理 1.基于内存存储实现 内存读写是比在磁盘快很多的,Redis 基于内存存储实现的数据库,相对于数据存在磁盘的 MySQL 数据库,省去磁盘 I/O…...
three.js之初识three.js
什么是three.js Three.js是一款运行在浏览器中的 3D 引擎(基于WebGL的API的封装) 什么是WebGL? WebGL(英语:Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和Open…...
二维码智慧门牌管理系统:地址管理的现代革命
文章目录 前言一、标准地址的革新二、广泛的应用前景 前言 在科技不断发展和社会进步的背景下,高效、精准、智能的管理系统已经成为当今社会的迫切需求。传统的门牌管理系统在应对这一需求方面已显得力不从心,因此,二维码智慧门牌管理系统的…...
BricsCAD 23 for Mac:轻松驾驭CAD建模的强大工具
如果你正在寻找一款功能强大、操作简便的CAD建模软件,那么BricsCAD 23 for Mac绝对值得你考虑。这款软件将为你提供一套完整的2D和3D设计解决方案,让你在Mac上轻松创建、编辑和修改图形。 一、BricsCAD 23的功能特点 高效的2D和3D建模:Bric…...
如何利用Web应用防火墙应对未知威胁
网络安全是一个永恒的话题,尤其是在未知威胁不断涌现的情况下。Web应用防火墙(WAF)是企业网络安全防线的重要组成部分,能够帮助企业在面对未知威胁时采取有效的防护措施。本文将探讨如何利用Web应用防火墙应对未知的网络威胁。 一…...
四、多线程服务器
1.进程的缺陷和线程的优点 1.进程的缺陷 创建进程(复制)的工作本身会给操作系统带来相当沉重的负担。 而且,每个进程具有独立的内存空间,所以进程间通信的实现难度也会随之提高。 同时,上下文切换(Cont…...
基于vue实现滑块动画效果
主要实现:通过鼠标移移动、触摸元素、鼠标释放、离开元素事件来进行触发 创建了一个滑动盒子,其中包含一个滑块图片。通过鼠标按下或触摸开始事件,开始跟踪滑块的位置和鼠标/触摸位置之间的偏移量。然后,通过计算偏移量和起始时的…...
探寻蓝牙的未来:从蓝牙1.0到蓝牙5.4,如何引领无线连接革命?
►►►蓝牙名字的来源 这要源于一个小故事,公元940-985年,哈洛德布美塔特(Harald Blatand),后人称Harald Bluetooth,统一了整个丹麦。他的名字“Blatand”可能取自两个古老的丹麦词语。“bla”意思是黑皮肤的,而“tan…...
openssl 之 RSA加密数据设置OAEP SHA256填充方式
背景 如题 环境 openssl 1.1.1l c centos7.9 代码 /** 思路:填充方式自己写,不需要使用库提供的,然后加密时选择不填充的方式加密 关键代码 */ int padding_result RSA_padding_add_PKCS1_OAEP_mgf1(buf, padding_len, (unsigned char*…...
js将带标签的内容转为纯文本
背景:现需要将富文本的所有 html 标签全部删除得到纯文本 思路:创建临时DOM元素并获取其中的文本 创建一个临时 DOM 并给他赋值,然后我们使用 DOM 对象方法提取文本。 代码如下: convertToPlain( html){//新创建一个 divvar di…...
室内设计案例分析/seo培训教程视频
课程亮点:一图胜千言,让文科生都能看得懂的python教程!!!另外加详细的笔记作为辅助工具,500多条笔记帮助学员学习Python500多个知识点课程内容:1. Python3语言总体介绍以及环境安装2. Python数据类型(一)-数…...
杭州亚运村建设指挥部网站/个人怎么开跨境电商店铺
刚开始学习C#的时候就写过了,直接给地址了: 委托、匿名函数、Lambda表达式和事件的学习 委托学习续:Action、Func和Predicate...
网站360自然排名要怎么做/新闻稿发布
在iOS app 中经常会嵌套html 代码,js运行alert时会出现这个问题,见图: 提示框的title为所在目录文件夹名字: 解决方案: 用 iOS native 的uiwebview 的扩展方法来监听 js的alert 然后自定义 alert 的title #import &…...
宁波网站优化软件/一键seo提交收录
时间设置有几个相关的概念:1、rtc时间/硬件时间:是指的例如主板上的某个实时时钟(rtc)硬件设备,这个时间是没有时区信息的,或者说他表示哪个时区的时间,依赖于“人为解读”2、系统时间ÿ…...
南宁网站建设公司哪家专业/中国新冠疫情最新消息
✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 目 录你是怎么理解乐观锁和悲观锁的,具体怎么实现呢? 悲观锁认为多个线程访问同一个共享变量冲突的概率较大, 会在每次访问共享变量之前都去真正加锁. 乐观…...
深圳建站公司优化/黄石市seo关键词优化怎么做
由于项目中大量用到了DataSet之类的东西,而vs2003下没有什么好用的查看工具,在网上查相关工具的时候,发现Codeproject上有两个比较合适的工具,其中又以http://www.codeproject.com/csharp/DataSetQuickWatchExt.asp的作法最为理想…...