惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志
Jina AI
Jina AI
博客园 - Franky
U
Unit 42
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享
B
Blog RSS Feed
雷峰网
雷峰网
D
DataBreaches.Net
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
InfoQ
美团技术团队
云风的 BLOG
云风的 BLOG
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
G
Google Developers Blog
T
Tailwind CSS Blog
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
月光博客
月光博客
Engineering at Meta
Engineering at Meta

博客园 - 金石碼农

邓安庆的贴地叙事:最简单的东西,往往最复杂 不是1M上下文的不用,不是免费大模型不用,全面实现 token 自由 RustPress 零成本博客,它承载了我的软件开发思想 只用了 3 分钟,我把那个按钮钉在了主页上 太不真实了!以前一周的活儿,现在一天干完,连边框都得听我的 别做网页了,以后智能体就是交互终端 以后写代码也得考驾照?别笑,这是未来编程的常态 她一年涨 7 万粉,只用了这几点社交平台的“笨办法” 怒开 3 个 agy CLI 账号!我是怎么在老 Intel Mac 上实现顶级模型 Token 自由的? 从命令行到桌面自动化:AI辅助创作的黄金方案 你越休息越累的真正原因,藏在一个被忽略的常识里 别再当信息垃圾收集器了!我体验了 CatReader,AI 伴读确实爽,但也有几个槽点 摸头石头编程 如何在 agy 中高效管理 AI Skill? 折腾谷歌最新 SDK 两天后,我发现开源软件已经没必要写给人类看了 第三天了,你的谷歌Antigravity还能跑吗? 一天干完一百万字,谷歌 agy 这个工具简直是头不要命的洪水猛兽 提示语工程的新六条 谷歌发布 Antigravity 2.0:界面干净了,但我怎么感觉又被“白嫖”了? 都 2026 年了,竟然还有人在翻我 2023 年的“保姆级”旧贴? 为什么 AI 给的代码,鼠标一点就消失了? Vide Coding 经验总结,核心五点 Mise 是一种好软件 我用 AI 写了四五个软件之后的总结 板栗是人是狗? 写福字 那个把代码当拖拉机修的小镇青年,活成了王阳明眼中最好的状态 如梦令·雪后 论狂 有一个家伙说 Vide Coding 上瘾
无敌脚本批量删除私有笔记
金石碼农 · 2026-01-20 · via 博客园 - 金石碼农

因为测试软件的关系我上传过一些测试笔记,有一些是我上传的,有一些是脚本上传的。留着怕占用社长的服务器存储空间,准备删掉。于是写了一个无敌脚本:

// 删除一个item并确认
async function deleteOneItem() {
  const noteOps = document.querySelectorAll([class*="note-operation"]);

  if (noteOps.length === 0) {
    console.log("没有items了");
    return false;
  }

  const firstNoteOp = noteOps[0];
  const parent = firstNoteOp.parentElement;
  const grandParent = parent?.parentElement;

  if (grandParent) {
    const titleEl = grandParent.querySelector([class*="title"]);
    const title = titleEl ? titleEl.textContent.trim() : "";

    console.log("删除: " + title);

    // 找索引1的按钮(真正的删除按钮)
    const allButtons = firstNoteOp.querySelectorAll("button, div[class*=\"button\"]");

    if (allButtons.length >= 2) {
      const deleteBtn = allButtons[1]; // 索引1是删除按钮
      console.log("  点击删除按钮");
      deleteBtn.click();

      // 等待确认面板出现
      await new Promise(resolve => setTimeout(resolve, 300));

      // 找并点击确定按钮
      const confirmBtn = document.querySelector(".button.button-primary.alert");
      if (confirmBtn) {
        console.log("  点击确定");
        confirmBtn.click();
        await new Promise(resolve => setTimeout(resolve, 300));
        return true;
      }
    }
  }

  return false;
}

// 连续删除直到目标
async function deleteAllBeforeTarget() {
  const targetTitle = "黄宗义规律";
  let deletedCount = 0;

  while (true) {
    const noteOps = document.querySelectorAll([class*="note-operation"]);

    if (noteOps.length === 0) {
      console.log("没有更多items了");
      break;
    }

    const firstNoteOp = noteOps[0];
    const parent = firstNoteOp.parentElement;
    const grandParent = parent?.parentElement;
    const titleEl = grandParent ? grandParent.querySelector([class*="title"]) : null;
    const title = titleEl ? titleEl.textContent.trim() : "";

    console.log("[" + (deletedCount + 1) + "] 检查: " + title);

    // 检查是否到达目标
    if (title === targetTitle) {
      console.log("到达目标: " + title);
      console.log("停止删除");
      break;
    }

    // 删除这一项
    const success = await deleteOneItem();
    if (success) {
      deletedCount++;
      console.log("已删除 " + deletedCount + " 项");
    } else {
      console.log("删除失败");
      break;
    }
  }
}

// 执行
window.deleteAllBeforeTarget();

使用方法很简单,打开 tab:

https://note.mowen.cn/my/notes?tab=private

在 console 面板粘入以上代码就可以了。

注意,一定要设置一个停止条件,例如我的是“黄宗义规律”,到这里就停止。你也要设置一条,防止都删除了。

写到这里想起一则旧笑话,一个程序员在网上找了一个教程,照着做,不小心执行 rm -rf 指令,然后电脑就坏了。他打开教程继续往下看,作者后面才写:以上操作是错误的,切莫尝试!

希望你看到了我写“黄宗义规律”。

image

技术·求真·AI

2026/01/20 周二 10:14