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();
複製以上腳本即可,有問題可在詢問~