分类: ai

如何删除所有推文

这个脚本的基础上,让 ChatGPT 改了改,适合中文界面使用,一键就能删除所有推文,方法和代码如下:

  1. 使用 Chrome 浏览器,登陆你的 X 账户
  2. 打开这个链接 https://x.com/USERNAME/with_replies ,用你的用户名替换链接里的 UASERNAME
  3. 在 Chrome 菜单里依次点击:显示-开发者-开发者工具
  4. 在开发者工具上方的栏目里选择“Console”
  5. 复制黏贴以下代码,回撤执行,等待足够长时间即可

const deleteAllTweetsAndReplies = async () => {
  const processed = new Set();
  const selectors = {
    tweet: '[data-testid="tweet"]', // 推文 & 回复
    caret: '[data-testid="caret"]',
    menuItem: '[role="menuitem"]',
    deleteConfirm: '[data-testid="confirmationSheetConfirm"]',
    unretweet: '[data-testid="unretweet"]',
    unretweetConfirm: '[data-testid="unretweetConfirm"]'
  };

  const delay = ms => {
    const jitter = ms * 0.3;
    const actual = ms + (Math.random() * jitter * 2 - jitter);
    return new Promise(resolve => setTimeout(resolve, actual));
  };

  const getButtons = () =>
    Array.from(document.querySelectorAll(${selectors.tweet} ${selectors.caret}))
      .filter(b => !processed.has(b));

  const scrollToEnd = async () => {
    window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });
    await delay(2500); // 等待加载
  };

  const attemptDelete = async button => {
    try {
      processed.add(button);
      button.scrollIntoView({ behavior: 'smooth', block: 'center' });
      await delay(500);
      button.click();
      await delay(500);

      const menuItems = Array.from(document.querySelectorAll(selectors.menuItem));
      const deleteWords = ['Delete', '删除', '删除贴文']; // 中英文匹配
      const deleteOption = menuItems.find(item =>
        deleteWords.some(word => item.textContent.includes(word))
      );

      if (deleteOption) {
        deleteOption.click();
        await delay(500);
        const confirm = document.querySelector(selectors.deleteConfirm);
        if (confirm) {
          confirm.click();
          await delay(3000);
          return true;
        }
      }

      const tweet = button.closest(selectors.tweet);
      const unretweet = tweet?.querySelector(selectors.unretweet);
      if (unretweet) {
        unretweet.click();
        await delay(500);
        const confirm = document.querySelector(selectors.unretweetConfirm);
        if (confirm) {
          confirm.click();
          await delay(3000);
          return true;
        }
      }
    } catch (err) {
      console.error('Error attempting to delete/unretweet:', err);
    }
    return false;
  };

  while (true) {
    let buttons = getButtons();
    if (!buttons.length) {
      await scrollToEnd();
      buttons = getButtons();
      if (!buttons.length) break;
    }

    for (const button of buttons) {
      await attemptDelete(button);
      await delay(800); // 防风控冷却
    }
  }

  console.log('所有推文和回复已处理完毕(删除或取消转推)。');
};

deleteAllTweetsAndReplies().catch(err => console.error('脚本执行失败:', err));

更新一下我的 open webui 状态

今天早上,我把 open webui 相关的几个服务都搬家到了一台三网直连的美西小鸡上,目前各个服务的状态如下。

ai 聊天界面

就是标题里面说的 open webui,类似的开源有许多,我选择这家主要因为界面不花哨,功能够用,更新够勤。

我是通过 python 虚拟环境安装,然后反代使用自己的域名。除了自用之外,给家人也开了账户,不过他们从来不用🤷。

api 代理

有的 api 不能直接在 open webui 里面使用,于是最近也安装了一个 api 代理,我的选择是大众化的 new api

安装和调试过程中有一些小坑,还好都通过 ai 的帮助解决,目前安装了以下三个渠道。

uDQAWsGfBciNYHP

grok-relay

这是朋友的朋友写的一个 docker 小程序,用来从 x.com 的网页逆向拿到 grok3 的 api 来使用。

有封号危险,并且额度和免费版一样,所以并不推荐。我之所以这么干,一是图个方便,二来,还是仓鼠心态。

api 清单

回到 open webui,我总共用这些 api。

  • 官方的 Grok 3,还有5刀余额,打算逐渐消耗完。通过官方端点直接连接。
  • Gemini 2.5 flash,通过官方端点连接使用,最近谷歌关闭了 2.5 pro 的免费额度,只能用 flash,对我来说差不多。
  • Deepseek,基本是摆设,有10元余额,通过官方端点连接。
  • Claude Sonnet 3.7,通过 new api 使用 aws 的 api,消耗我在 aws 里25美金的余额。为什么不用 Sonnet 4?aws 不给额度。
  • 逆向的 Grok 3,刚刚说过,也是通过 new api 来使用。

除了 open webui,我主要还是使用免费的 ChatGPT 和已经订阅的 Claude。只有在网络环境不好的时候(自建的服务可以直连),以及需要使用某个项目的时候,才会打开 open webui。

以上。

Perplexity ai 的 Mac 版初体验

和网页版最大的区别,是多了很多快捷键,如下
sjHmuhnQfRDtPMJ
以前我都是用 Alfred 输入“pp” + 文字来跳转 pplx 网页版进行搜索,
现在可以直接用 Mac app 版的快捷键,方便一些,
特别是常用的“文件上传”功能,之前的 Alfred 是无法实现的,
所以,现在用 Mac app 方便许多。

至于语音对话,暂时还没有需求。

在 Alfred 里添加 perplexity 搜索

Perplexity 是个 ai 增强的搜索引擎,用我的话来说,它在提供从互联网上搜索出来的页面结果的同时,也提供由 ai 生成的,基于这些页面的关于你的问题的答案。

再说简单点,perplexity 是个 ai 增强搜索引擎。

通过 Alfred 来使用 perplexity 的方式其实就是在 Alfred 自带的 Web Search 功能里添加一个自定义搜索。不过,我帮你省略一步,你只需要在装有 Alfred 的 Mac 上点击以下链接,就能添加这个搜索。

点击这里

添加成功之后,呼出 Alfred,输入关键字 pai,然后写下你想搜索的关键词或问题,回车,就可以了。试试看吧?

Raindrop 的 ai 可以帮你选择存储分类、优化分类、打标签

Raindrop 的 ai 辅助前几个月就出来了,当我存储网页时,它会根据网页内容推荐给我应该存到哪个类别

比如说,刚刚存了一个亚马逊上的某本书的页面,当我点击存储时,它推荐我存在我的 media/book 分类,的确有点用。

昨天官方更新了一篇对于使用 ai 的小技巧的文章,除了存储时的推荐,在 Raindrop 页面里,也有一个 ai 的按钮,点击之后,可以分析然后推荐你将已经分类的网页,归属到它推荐的地方。至于打标签功能,我还没有试过。

不需要立刻整理你的书签。每当你有空闲时间,只需点击组织技巧页面。在那里,你会发现一些即用即取的技巧,用于提升你的书签组织:

将未分类的书签移动到正确的收藏夹
修正错位的书签
给书签打标签
简化标签
未来会有更多内容