FB社團待審貼文刪除工具

Facebook 社團待審貼文自動刪除腳本 



這裡也有 Marketplace 自動刪除商品貼文腳本~
這裡也有
 Facebook 社團貼文自動刪除腳本 ~




 功能:自動刪除待審貼文
 使用方法:
 1. 前往您的Facebook社團待審貼文頁面,點擊管理內容







2. 打開瀏覽器開發者工具 (F12 或右鍵 -> 檢查),切換到 Console 標籤








3. 先打 'allow pasting'按 Enter,再複製貼上此腳本並按 Enter 執行



'allow pasting'這個要多試幾次或刷新再打一次才會成功貼上腳本




 

以下為腳本 :




const delay = ms => new Promise(res => setTimeout(res, ms));
const randomDelay = (min = 300, max = 700) => delay(Math.floor(Math.random() * (max - min + 1)) + min);
function preventRedirect() {
  const originalPushState = history.pushState;
  const originalReplaceState = history.replaceState;
  const originalAssign = window.location.assign;
  const originalReplace = window.location.replace;
  let originalHref = window.location.href;
 
  history.pushState = function() {
    return originalPushState.apply(this, arguments);
  };
 
  history.replaceState = function() {
    return originalReplaceState.apply(this, arguments);
  };
 
  window.location.assign = function() {
    return false;
  };
 
  window.location.replace = function() {
    return false;
  };
 
  // 使用監聽方式而非重新定義屬性
  let locationWatcher = setInterval(() => {
    if (window.location.href !== originalHref) {
      if (window.location.href.includes('friends')) {
        window.history.back();
      }
      originalHref = window.location.href;
    }
  }, 1000);
}
async function clickConfirmDelete() {
  await delay(800);
  const confirmBtns = Array.from(document.querySelectorAll('div[role="dialog"] button, div[role="dialog"] div[role="button"]'));
  const confirmBtn = confirmBtns.find(el =>
    el.innerText.trim() === '刪除' &&
    (el.tagName === 'BUTTON' || el.getAttribute('role') === 'button')
  );
  if (confirmBtn) {
    confirmBtn.click();
    return true;
  } else {
    await delay(1000);
    return await clickConfirmDelete();
  }
}
async function deleteUntilNoneLeft() {
  let deleted = 0;
  const skippedPosts = new Set();
  let loopsWithoutNewButtons = 0;
  while (true) {
    let menuButtons = Array.from(document.querySelectorAll('div[role="button"]')).filter(el =>
      (el.innerText.includes('⋯') || el.getAttribute('aria-label')?.includes('動作')) &&
      !el.dataset.processed
    );
    if (menuButtons.length === 0) {
      loopsWithoutNewButtons++;
      if (loopsWithoutNewButtons >= 3) {
        break;
      }
      for (let j = 0; j < 3; j++) {
        window.scrollBy(0, -600);
        await delay(1000);
        window.scrollBy(0, 1200);
        await delay(1200);
      }
      continue;
    }
    loopsWithoutNewButtons = 0;
    for (let i = 0; i < menuButtons.length; i++) {
      const button = menuButtons[i];
      try {
        button.scrollIntoView({ behavior: 'smooth' });
        await randomDelay();
        button.click();
        button.dataset.processed = "true";
        await delay(1000);
        const deleteOption = Array.from(document.querySelectorAll('span, div')).find(el =>
          el.innerText.trim() === '刪除貼文'
        );
        if (!deleteOption) {
          skippedPosts.add(`第 ${i + 1} 筆`);
          continue;
        }
        deleteOption.click();
        const confirmed = await clickConfirmDelete();
        if (confirmed) {
          deleted++;
        }
        await randomDelay();
      } catch (err) {
        skippedPosts.add(`錯誤第 ${i + 1} 筆`);
      }
    }
    window.scrollTo(0, document.body.scrollHeight);
    await delay(1500);
  }
}
preventRedirect();
deleteUntilNoneLeft();


複製以上腳本即可,有問題可在詢問~