设为首页收藏本站我的广告 劰载中...

UC社区 | UC论坛 | UC非官网论坛 | UC社区诺亚方舟号 | UC浏览器 上网最省流量的手机浏览器

查看: 10|回复: 5

微博聊天循环删除脚本.js

[复制链接]

59

主题

79

帖子

82

积分

UC中班

Rank: 2

积分
82
发表于 昨天 15:07 | 显示全部楼层 |阅读模式

* 2. 按 F12 打开开发者工具
* 3. 切换到 Console(控制台)标签
* 4. 粘贴此脚本并按回车
* 5. 输入 deleteAllConversations() 并回车执行
*/

(function() {
    'use strict';

    // 配置
    const config = {
        deleteDelay: 800,      // 每次删除后等待时间(毫秒)
        maxIterations: 100,    // 最大循环次数
        showProgress: true     // 显示进度
    };



限制字数 我服了




上一篇:Sun-Panel V2

59

主题

79

帖子

82

积分

UC中班

Rank: 2

积分
82
 楼主| 发表于 昨天 15:09 | 显示全部楼层
       
抱歉,您的帖子超过 10000 个字符的限制
回复

使用道具 举报

2

主题

241

帖子

225

积分

UC小学生

我是抽大烟

Rank: 4

积分
225
发表于 昨天 15:13 | 显示全部楼层
Google 发表于 2026-2-25 15:09
抱歉,您的帖子超过 10000 个字符的限制

改了,你再试试
回复

使用道具 举报

59

主题

79

帖子

82

积分

UC中班

Rank: 2

积分
82
 楼主| 发表于 昨天 15:15 | 显示全部楼层
  1. /**
  2. * 微博聊天一键删除所有会话框 - 循环删除版
  3. *
  4. * 使用方法:
  5. * 1. 打开微博聊天网页版 https://api.weibo.com/chat#/chat 并登录
  6. * 2. 按 F12 打开开发者工具
  7. * 3. 切换到 Console(控制台)标签
  8. * 4. 粘贴此脚本并按回车
  9. * 5. 输入 deleteAllConversations() 并回车执行
  10. */

  11. (function() {
  12.     'use strict';

  13.     // 配置
  14.     const config = {
  15.         deleteDelay: 800,      // 每次删除后等待时间(毫秒)
  16.         maxIterations: 100,    // 最大循环次数
  17.         showProgress: true     // 显示进度
  18.     };

  19.     // 多种可能的选择器
  20.     const selectors = [
  21.         // 聊天列表项
  22.         '.chat-item',
  23.         '.conversation-item',
  24.         '.session-item',
  25.         '.list-item',
  26.         '[class*="chatList"] > div',
  27.         '[class*="conversation"] > div',
  28.         '[class*="session"] > div',
  29.         // 通用选择器
  30.         'ul.chat-list > li',
  31.         'div[class*="list"] > div[class*="item"]',
  32.         // 查找包含聊天气泡或消息的元素
  33.         '[class*="bubble"]',
  34.         // 滚动列表中的项目
  35.         '.scroll-item',
  36.         '.item-wrapper'
  37.     ];

  38.     // 查找所有会话元素
  39.     function findConversations() {
  40.         let elements = [];

  41.         // 尝试每种选择器
  42.         for (const selector of selectors) {
  43.             const found = document.querySelectorAll(selector);
  44.             if (found.length > 0) {
  45.                 // 过滤掉非会话的元素(如广告、提示等)
  46.                 elements = Array.from(found).filter(el => {
  47.                     const text = el.textContent || '';
  48.                     const className = el.className || '';
  49.                     // 排除明显不是会话的元素
  50.                     if (text.includes('广告') || text.includes('推广')) return false;
  51.                     if (className.includes('header') || className.includes('footer')) return false;
  52.                     // 保留可能包含用户名/消息的元素
  53.                     return true;
  54.                 });
  55.                 if (elements.length > 0) {
  56.                     console.log(`使用选择器: ${selector}, 找到 ${elements.length} 个元素`);
  57.                     return elements;
  58.                 }
  59.             }
  60.         }

  61.         // 最后尝试:查找所有可能是列表项的元素
  62.         const allDivs = document.querySelectorAll('div');
  63.         elements = Array.from(allDivs).filter(el => {
  64.             const rect = el.getBoundingClientRect();
  65.             return rect.width > 100 && rect.height > 30 && rect.height < 200;
  66.         });

  67.         return elements;
  68.     }

  69.     // 查找删除按钮
  70.     function findDeleteButton(item) {
  71.         // 方法1:直接查找带有删除相关文字/属性的按钮
  72.         const allButtons = item.querySelectorAll('button, span[role="button"], div[role="button"]');
  73.         for (const btn of allButtons) {
  74.             const text = (btn.textContent || '').trim().toLowerCase();
  75.             const title = (btn.title || '').toLowerCase();
  76.             const className = (btn.className || '').toLowerCase();

  77.             if (text.includes('删除') || text.includes('del') ||
  78.                 title.includes('删除') || className.includes('delete') ||
  79.                 className.includes('remove')) {
  80.                 return btn;
  81.             }
  82.         }

  83.         // 方法2:查找图标按钮(删除通常是垃圾桶图标)
  84.         const iconButtons = item.querySelectorAll('[class*="icon"], svg');
  85.         for (const icon of iconButtons) {
  86.             const parent = icon.closest('button') || icon.closest('[role="button"]');
  87.             if (parent) return parent;
  88.         }

  89.         return null;
  90.     }

  91.     // 触发删除
  92.     async function triggerDelete(item) {
  93.         try {
  94.             // 方法1:点击删除按钮
  95.             const deleteBtn = findDeleteButton(item);
  96.             if (deleteBtn) {
  97.                 deleteBtn.click();
  98.                 await wait(300);

  99.                 // 查找确认对话框
  100.                 const confirmButtons = document.querySelectorAll('button, div[role="button"], span[role="button"]');
  101.                 for (const btn of confirmButtons) {
  102.                     const text = (btn.textContent || '').trim().toLowerCase();
  103.                     if (text === '确定' || text === '确认' || text.includes('删除') || text === 'ok' || text === 'yes') {
  104.                         if (!text.includes('取消')) {
  105.                             btn.click();
  106.                             return true;
  107.                         }
  108.                     }
  109.                 }
  110.                 return true;
  111.             }

  112.             // 方法2:右键点击唤出菜单
  113.             const rect = item.getBoundingClientRect();
  114.             item.dispatchEvent(new MouseEvent('contextmenu', {
  115.                 bubbles: true,
  116.                 clientX: rect.left + rect.width / 2,
  117.                 clientY: rect.top + rect.height / 2
  118.             }));

  119.             await wait(500);

  120.             // 查找菜单中的删除选项
  121.             const menuItems = document.querySelectorAll('[class*="menu"] li, [class*="dropdown"] li, [class*="contextmenu"] li');
  122.             for (const menuItem of menuItems) {
  123.                 const text = (menuItem.textContent || '').toLowerCase();
  124.                 if (text.includes('删除') || text.includes('del') || text.includes('remove')) {
  125.                     menuItem.click();
  126.                     await wait(300);

  127.                     // 再次确认
  128.                     const confirmButtons = document.querySelectorAll('button, div[role="button"]');
  129.                     for (const btn of confirmButtons) {
  130.                         const btnText = (btn.textContent || '').trim().toLowerCase();
  131.                         if (btnText === '确定' || btnText === '确认' || btnText === 'ok') {
  132.                             btn.click();
  133.                             return true;
  134.                         }
  135.                     }
  136.                     return true;
  137.                 }
  138.             }

  139.             // 方法3:直接移除元素(最后手段)
  140.             if (item.remove) {
  141.                 item.remove();
  142.                 return true;
  143.             } else if (item.parentNode) {
  144.                 item.parentNode.removeChild(item);
  145.                 return true;
  146.             }

  147.             return false;

  148.         } catch (error) {
  149.             console.error('删除出错:', error);
  150.             return false;
  151.         }
  152.     }

  153.     // 等待函数
  154.     function wait(ms) {
  155.         return new Promise(resolve => setTimeout(resolve, ms));
  156.     }

  157.     // 主函数 - 循环删除所有会话
  158.     async function deleteAllConversations() {
  159.         console.log('%c 微博聊天 - 循环删除所有会话 ', 'background: #ff6b6b; color: white; font-size: 16px; padding: 10px;');

  160.         // 确认
  161.         const confirmed = confirm('确定要删除微博聊天的所有会话吗?\n\n脚本将循环删除直到全部删除完成。');
  162.         if (!confirmed) {
  163.             console.log('已取消');
  164.             return;
  165.         }

  166.         let totalDeleted = 0;
  167.         let iteration = 0;

  168.         while (iteration < config.maxIterations) {
  169.             iteration++;

  170.             // 每次都重新获取会话列表
  171.             const conversations = findConversations();

  172.             if (conversations.length === 0) {
  173.                 console.log('%c ✓ 所有会话已删除完成! ', 'background: #4ecdc4; color: white; font-size: 14px; padding: 8px;');
  174.                 console.log(`总计删除: ${totalDeleted} 个会话`);
  175.                 alert(`删除完成!共删除 ${totalDeleted} 个会话`);
  176.                 return;
  177.             }

  178.             if (config.showProgress) {
  179.                 console.log(`第 ${iteration} 轮:还有 ${conversations.length} 个会话待删除,已删除 ${totalDeleted} 个`);
  180.             }

  181.             // 删除当前列表中的第一个会话
  182.             const item = conversations[0];
  183.             const success = await triggerDelete(item);

  184.             if (success) {
  185.                 totalDeleted++;
  186.             }

  187.             // 等待DOM更新
  188.             await wait(config.deleteDelay);
  189.         }

  190.         console.log(`已达到最大循环次数 ${config.maxIterations},已删除 ${totalDeleted} 个会话`);
  191.         alert(`完成!共删除 ${totalDeleted} 个会话\n如果还有剩余,请刷新页面后重新执行`);
  192.     }

  193.     // 快速删除模式 - 每次删除多个
  194.     async function fastDelete() {
  195.         console.log('%c 微博聊天 - 快速删除模式 ', 'background: #45b7d1; color: white; font-size: 16px; padding: 10px;');

  196.         const confirmed = confirm('快速删除模式:\n\n将尽可能快地批量删除所有会话');
  197.         if (!confirmed) return;

  198.         let totalDeleted = 0;
  199.         let emptyCount = 0;

  200.         while (emptyCount < 5) {
  201.             const conversations = findConversations();

  202.             if (conversations.length === 0) {
  203.                 emptyCount++;
  204.                 await wait(500);
  205.                 continue;
  206.             }

  207.             emptyCount = 0;

  208.             // 每次尝试删除前3个
  209.             const toDelete = conversations.slice(0, 3);

  210.             for (const item of toDelete) {
  211.                 await triggerDelete(item);
  212.             }

  213.             totalDeleted += toDelete.length;
  214.             console.log(`已删除 ${totalDeleted} 个...`);

  215.             await wait(config.deleteDelay);
  216.         }

  217.         alert(`快速删除完成!共删除 ${totalDeleted} 个会话`);
  218.     }

  219.     // 导出函数
  220.     window.deleteAllConversations = deleteAllConversations;
  221.     window.fastDelete = fastDelete;

  222.     console.log('%c 微博聊天删除脚本已加载 ', 'background: #4ecdc4; color: white; font-size: 14px; padding: 8px;');
  223.     console.log('可用函数:');
  224.     console.log('  deleteAllConversations() - 循环删除所有会话');
  225.     console.log('  fastDelete() - 快速删除模式');

  226. })();
复制代码
回复

使用道具 举报

59

主题

79

帖子

82

积分

UC中班

Rank: 2

积分
82
 楼主| 发表于 昨天 15:17 | 显示全部楼层
还有个终极暴力版本,改了参数好像没什么效果,用一版改下参数反正删完了,此版备份
  1. /**
  2. * 微博聊天一键删除所有会话框 - 终极版
  3. * 针对微博聊天网页版特点优化
  4. *
  5. * 使用方法:
  6. * 1. 打开 https://api.weibo.com/chat#/chat 并登录
  7. * 2. F12 打开开发者工具 → Console
  8. * 3. 粘贴脚本回车
  9. * 4. 输入 deleteAllConversations() 回车执行
  10. */

  11. (function() {
  12.     'use strict';

  13.     // 设置参数
  14.     const DELAY = 1000;  // 每次删除间隔(毫秒)

  15.     console.log('%c 微博聊天 - 终极删除脚本 ', 'background: #e74c3c; color: white; font-size: 16px; padding: 10px;');

  16.     // 获取会话列表容器
  17.     function getChatList() {
  18.         // 尝试多种可能的容器选择器
  19.         const containers = [
  20.             '.chat-list',
  21.             '.conversation-list',
  22.             '.session-list',
  23.             '[class*="list"]',
  24.             'ul',
  25.             '[class*="container"]'
  26.         ];

  27.         for (const selector of containers) {
  28.             const container = document.querySelector(selector);
  29.             if (container && container.children.length > 0) {
  30.                 // 检查是否像会话列表
  31.                 const children = Array.from(container.children);
  32.                 const hasChatItems = children.some(child => {
  33.                     const text = child.textContent || '';
  34.                     const hasName = /[\u4e00-\u9fa5a-zA-Z0-9]{2,}/.test(text);
  35.                     return hasName && child.querySelector('img, [class*="avatar"], [class*="avatar"]');
  36.                 });
  37.                 if (hasChatItems) {
  38.                     return container;
  39.                 }
  40.             }
  41.         }

  42.         return null;
  43.     }

  44.     // 获取所有会话项
  45.     function getAllConversations() {
  46.         const list = getChatList();
  47.         if (!list) {
  48.             // 尝试直接获取页面中所有可能是会话的元素
  49.             const allElements = document.querySelectorAll('li, div[class*="item"]');
  50.             return Array.from(allElements).filter(el => {
  51.                 const rect = el.getBoundingClientRect();
  52.                 return rect.width > 200 && rect.height > 40 && el.textContent.trim().length > 0;
  53.             });
  54.         }

  55.         return Array.from(list.children).filter(el => {
  56.             const text = el.textContent || '';
  57.             return text.trim().length > 0 && !text.includes('广告');
  58.         });
  59.     }

  60.     // 尝试点击删除按钮
  61.     async function clickDeleteButton(item) {
  62.         // 查找所有可能删除按钮
  63.         const allElements = item.querySelectorAll('*');

  64.         for (const el of allElements) {
  65.             const tagName = el.tagName.toLowerCase();
  66.             if (tagName !== 'button' && tagName !== 'div' && tagName !== 'span') continue;

  67.             const text = (el.textContent || '').trim();
  68.             const className = (el.className || '').toLowerCase();
  69.             const title = (el.title || '').toLowerCase();

  70.             // 判断是否是删除相关按钮
  71.             const isDeleteBtn = text === '删除' || text === 'Del' ||
  72.                                className.includes('delete') || className.includes('del') ||
  73.                                className.includes('remove') || title.includes('删除');

  74.             if (isDeleteBtn) {
  75.                 // 尝试点击
  76.                 try {
  77.                     el.click();
  78.                     return true;
  79.                 } catch (e) {
  80.                     // 尝试其他方式触发点击
  81.                     const event = new MouseEvent('click', { bubbles: true });
  82.                     el.dispatchEvent(event);
  83.                     return true;
  84.                 }
  85.             }
  86.         }

  87.         // 尝试右键菜单
  88.         const rect = item.getBoundingClientRect();
  89.         item.dispatchEvent(new MouseEvent('contextmenu', {
  90.             bubbles: true,
  91.             clientX: rect.left + rect.width / 2,
  92.             clientY: rect.top + rect.height / 2
  93.         }));

  94.         await new Promise(r => setTimeout(r, 500));

  95.         // 查找菜单
  96.         const menu = document.querySelector('[class*="menu"]');
  97.         if (menu) {
  98.             const menuItems = menu.querySelectorAll('li, div, span');
  99.             for (const menuItem of menuItems) {
  100.                 const text = (menuItem.textContent || '').toLowerCase();
  101.                 if (text.includes('删除') || text.includes('del') || text.includes('remove')) {
  102.                     menuItem.click();
  103.                     return true;
  104.                 }
  105.             }
  106.         }

  107.         return false;
  108.     }

  109.     // 确认对话框
  110.     async function confirmDialog() {
  111.         await new Promise(r => setTimeout(r, 300));

  112.         // 查找确认按钮
  113.         const buttons = document.querySelectorAll('button, [role="button"], div[class*="button"]');

  114.         for (const btn of buttons) {
  115.             const text = (btn.textContent || '').trim().toLowerCase();
  116.             if (text === '确定' || text === '确认' || text === 'ok' || text === 'confirm') {
  117.                 if (!text.includes('取消')) {
  118.                     btn.click();
  119.                     return true;
  120.                 }
  121.             }
  122.         }

  123.         // 模拟回车确认
  124.         document.activeElement?.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter' }));

  125.         return true;
  126.     }

  127.     // 删除单个会话
  128.     async function deleteOne(item) {
  129.         try {
  130.             // 尝试点击删除按钮
  131.             const clicked = await clickDeleteButton(item);

  132.             if (clicked) {
  133.                 await confirmDialog();
  134.                 return true;
  135.             }

  136.             // 最后手段:直接移除元素
  137.             if (item.remove) {
  138.                 item.remove();
  139.                 return true;
  140.             }

  141.             return false;
  142.         } catch (e) {
  143.             console.error('删除出错:', e);
  144.             return false;
  145.         }
  146.     }

  147.     // 主函数
  148.     async function deleteAllConversations() {
  149.         const confirmed = confirm('确定要删除微博聊天的所有会话吗?\n此操作不可恢复!');
  150.         if (!confirmed) return;

  151.         let total = 0;
  152.         let round = 0;
  153.         let emptyRounds = 0;

  154.         while (emptyRounds < 3) {
  155.             round++;
  156.             const items = getAllConversations();

  157.             if (items.length === 0) {
  158.                 emptyRounds++;
  159.                 await new Promise(r => setTimeout(r, 500));
  160.                 console.log(`第 ${round} 轮:未找到会话`);
  161.                 continue;
  162.             }

  163.             emptyRounds = 0;
  164.             console.log(`第 ${round} 轮:还有 ${items.length} 个会话, 已删除 ${total} 个`);

  165.             // 删除第一个
  166.             const item = items[0];
  167.             const success = await deleteOne(item);

  168.             if (success) {
  169.                 total++;
  170.             }

  171.             // 等待页面更新
  172.             await new Promise(r => setTimeout(r, DELAY));
  173.         }

  174.         console.log(`%c ✓ 删除完成!共删除 ${total} 个会话 `, 'background: #27ae60; color: white; font-size: 14px; padding: 8px;');
  175.         alert(`删除完成!共删除 ${total} 个会话`);
  176.     }

  177.     // 导出
  178.     window.deleteAllConversations = deleteAllConversations;

  179.     console.log('脚本已就绪!');
  180.     console.log('执行 deleteAllConversations() 开始删除');

  181. })();
复制代码
回复

使用道具 举报

59

主题

79

帖子

82

积分

UC中班

Rank: 2

积分
82
 楼主| 发表于 昨天 15:19 | 显示全部楼层
  1.         deleteDelay: 800,      // 每次删除后等待时间(毫秒)
  2.         maxIterations: 100,    // 最大循环次数
复制代码


改成100  500  挂那就行了,好像没被风控
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|UC社区-诺亚方舟号

GMT+8, 2026-2-26 06:23 , Processed in 0.077515 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表