最近在整理小red书收藏,为减少使用鼠标频率,写了段JS脚本,在这备份下。
功能: 按下键盘E键,实现点击收藏按钮取消收藏,并退出当前弹窗
使用方式: 将以下代码复制到小red书收藏界面的控制台即可执行
document.addEventListener(
"keydown",
(function () {
// 记录上次按键时间
let lastPress = 0;
// 限制300ms内不能连续触发
const pressDelay = 300;
// 缓存Tribute.js实例,防止重复绑定
const tributeInstance = new Map();
return function (event) {
// 避免在输入框内触发该脚本
if (["INPUT", "TEXTAREA"].includes(event.target.tagName)) return;
// 仅监听E/e按键,按需修改
if (event.key.toLowerCase() !== "e") return;
const now = Date.now();
// 防止短时间内重复点击,否则内存占用过大
if (now - lastPress < pressDelay) return;
lastPress = now;
const element = document.querySelector("#note-page-collect-board-guide");
if (element instanceof HTMLElement) {
try {
element.click();
console.log("✅已点击收藏键");
} catch (error) {
console.error("❌点击收藏按钮失败:", error);
return;
}
// 使用 requestIdleCallback 避免 UI 阻塞
requestIdleCallback(() => {
try {
document.dispatchEvent(new KeyboardEvent("keyup", { key: "Escape", bubbles: true }));
console.log("✅ 已模拟按下ESC");
} catch (error) {
console.error("❌ESC模拟按下失败:", error);
}
});
// 处理 Tribute.js,避免重复绑定
if (!tributeInstance.has(element)) {
tributeInstance.set(
element,
new Tribute({
collection: [
{
trigger: "@",
values: [{ key: "example", value: "示例" }],
},
],
})
);
}
} else {
console.warn("⚠️未找到收藏按钮!");
}
};
})(),
{ passive: true }
);
清理了几百条后弹窗安全限制了😶
在右上角添加了一个累加按下收藏键次数的累加器
document.addEventListener(
"keydown",
(function () {
// 记录上次按键时间
let lastPress = 0;
// 限制300ms内不能连续触发
const pressDelay = 300;
// 缓存Tribute.js实例,防止重复绑定
const tributeInstance = new Map();
// 创建累加器
let counter = 0;
// 创建一个浮动窗口显示计数器
const counterDisplay = document.createElement("div");
counterDisplay.style.position = "fixed";
counterDisplay.style.top = "10px";
counterDisplay.style.right = "10px";
counterDisplay.style.background = "rgba(0, 0, 0, 0.7)";
counterDisplay.style.color = "white";
counterDisplay.style.padding = "10px";
counterDisplay.style.borderRadius = "5px";
counterDisplay.style.fontSize = "16px";
counterDisplay.style.zIndex = "9999";
counterDisplay.textContent = `收藏键按下次数: ${counter}`;
document.body.appendChild(counterDisplay);
return function (event) {
// 避免在输入框内触发该脚本
if (["INPUT", "TEXTAREA"].includes(event.target.tagName)) return;
// 仅监听E/e按键,按需修改
if (event.key.toLowerCase() !== "e") return;
const now = Date.now();
// 防止短时间内重复点击,否则内存占用过大
if (now - lastPress < pressDelay) return;
lastPress = now;
const element = document.querySelector("#note-page-collect-board-guide");
if (element instanceof HTMLElement) {
try {
element.click();
console.log("✅已点击收藏键");
// 更新计数器
counter++;
counterDisplay.textContent = `收藏键按下次数: ${counter}`;
} catch (error) {
console.error("❌点击收藏按钮失败:", error);
return;
}
// 使用 requestIdleCallback 避免 UI 阻塞
requestIdleCallback(() => {
try {
document.dispatchEvent(new KeyboardEvent("keyup", { key: "Escape", bubbles: true }));
console.log("✅ 已模拟按下ESC");
} catch (error) {
console.error("❌ESC模拟按下失败:", error);
}
});
// 处理 Tribute.js,避免重复绑定
if (!tributeInstance.has(element)) {
tributeInstance.set(
element,
new Tribute({
collection: [
{
trigger: "@",
values: [{ key: "example", value: "示例" }],
},
],
})
);
}
} else {
console.warn("⚠️未找到收藏按钮!");
}
};
})(),
{ passive: true }
);