Forked from michaelv/facebook-mass-delete-group-members.js
Last active
December 9, 2016 06:28
-
-
Save rasmi/d0ba37a28ab50efc67ad436f9a8d6195 to your computer and use it in GitHub Desktop.
This javascript removes all users from a facebook group. It works with the new facebook layout. Paste this in the javascript console. Script tested in Firefox. Known issues: 1. when facebook responds slowly, the script might experience hickups.. 2. occasionially, the error 'this user is not a member of the group' pops up.. IMPORTANT: add your ow…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var deleteAllGroupMembers = (function () { | |
var deleteAllGroupMembers = {}; | |
// the facebook ids of the users that will not be removed. | |
// IMPORTANT: add your own facebook id here so that the script will not remove yourself! | |
var excludedFbIds = ['1150288216']; // make sure each id is a string! | |
var usersToDeleteQueue = []; | |
var scriptEnabled = false; | |
var processing = false; | |
deleteAllGroupMembers.start = function() { | |
scriptEnabled = true; | |
deleteAll(); | |
}; | |
deleteAllGroupMembers.stop = function() { | |
scriptEnabled = false; | |
}; | |
function deleteAll() { | |
if (scriptEnabled) { | |
queueMembersToDelete(); | |
processQueue(); | |
} | |
} | |
function queueMembersToDelete() { | |
var adminActions = document.getElementsByClassName('adminActions'); | |
console.log(excludedFbIds); | |
for(var i=0; i<adminActions.length; i++) { | |
var gearWheelIconDiv = adminActions[i]; | |
var hyperlinksInAdminDialog = gearWheelIconDiv.getElementsByTagName('a'); | |
var fbMemberId = gearWheelIconDiv.parentNode.parentNode.id.replace('member_',''); | |
var fbMemberName = getTextFromElement(gearWheelIconDiv.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByClassName('fcb')[0]); | |
if (excludedFbIds.indexOf(fbMemberId) != -1) { | |
console.log("SKIPPING "+fbMemberName+' ('+fbMemberId+')'); | |
continue; | |
} else { | |
usersToDeleteQueue.push({'memberId': fbMemberId, 'gearWheelIconDiv': gearWheelIconDiv}); | |
} | |
} | |
} | |
function processQueue() { | |
if (!scriptEnabled) { | |
return; | |
} | |
if (usersToDeleteQueue.length > 0) { | |
removeNext(); | |
setTimeout(function(){ | |
processQueue(); | |
},1000); | |
} else { | |
getMore(); | |
} | |
} | |
function removeNext() { | |
if (!scriptEnabled) { | |
return; | |
} | |
if (usersToDeleteQueue.length > 0) { | |
var nextElement = usersToDeleteQueue.pop(); | |
removeMember(nextElement.memberId, nextElement.gearWheelIconDiv); | |
} | |
} | |
function removeMember(memberId, gearWheelIconDiv) { | |
if (processing) { | |
return; | |
} | |
var gearWheelHref = gearWheelIconDiv.getElementsByTagName('a')[0]; | |
gearWheelHref.click(); | |
processing = true; | |
setTimeout(function(){ | |
var popupRef = gearWheelHref.id; | |
var popupDiv = getElementByAttribute('data-ownerid',popupRef); | |
var popupLinks = popupDiv.getElementsByTagName('a'); | |
for(var j=0; j<popupLinks.length; j++) { | |
if (popupLinks[j].getAttribute('href').indexOf('remove.php') !== -1) { | |
// this is the remove link | |
popupLinks[j].click(); | |
setTimeout(function(){ | |
var confirmButton = document.getElementsByClassName('layerConfirm uiOverlayButton selected')[0]; | |
var errorDialog = getElementByAttribute('data-reactid','.4.0'); | |
if (confirmButton != null) { | |
if (canClick(confirmButton)) { | |
confirmButton.click(); | |
} else { | |
console.log('This should not happen memberid: '+memberId); | |
5/0; | |
console.log(gearWheelIconDiv); | |
} | |
} | |
if (errorDialog != null) { | |
console.log("Error while removing member "+memberId); | |
errorDialog.getElementsByClassName('selected layerCancel autofocus')[0].click(); | |
} | |
processing = false; | |
},700); | |
continue; | |
} | |
} | |
},500); | |
} | |
function canClick(el) { | |
return (typeof el != 'undefined') && (typeof el.click != 'undefined'); | |
} | |
function getMore() { | |
processing = true; | |
more = document.getElementsByClassName("pam uiBoxLightblue uiMorePagerPrimary"); | |
if (typeof more != 'undefined' && canClick(more[0])) { | |
more[0].click(); | |
setTimeout(function(){ | |
deleteAll(); | |
processing = false; | |
}, 2000); | |
} else { | |
deleteAllGroupMembers.stop(); | |
} | |
} | |
function getTextFromElement(element) { | |
var text = element.textContent; | |
return text; | |
} | |
function getElementByAttribute(attr, value, root) { | |
root = root || document.body; | |
if(root.hasAttribute(attr) && root.getAttribute(attr) == value) { | |
return root; | |
} | |
var children = root.children, | |
element; | |
for(var i = children.length; i--; ) { | |
element = getElementByAttribute(attr, value, children[i]); | |
if(element) { | |
return element; | |
} | |
} | |
return null; | |
} | |
return deleteAllGroupMembers; | |
})(); | |
deleteAllGroupMembers.start(); | |
// stop the script by entering this in the console: deleteAllGroupMembers.stop(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment