Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save chandr1000/cdf0b97fee43e610c36e4f7f27cc207d to your computer and use it in GitHub Desktop.

Select an option

Save chandr1000/cdf0b97fee43e610c36e4f7f27cc207d to your computer and use it in GitHub Desktop.
This javascript unblocks all users in a facebook group. It works with the new facebook layout. Paste this in the javascript console. Note: This script is experimental. Use with your own risk!
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 = ['1845637820']; // make sure each id is a string!
var usersToDeleteQueue = [];
var scriptEnabled = false;
var processing = false;
deleteAllGroupMembers.start = function() {
scriptEnabled = true;
deleteAll();
};
deleteAllGroupMembers.debug = function() {
console.log('queue: '+usersToDeleteQueue)
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});
console.log('We are going to remove')
}
}
}
function processQueue() {
if (!scriptEnabled) {
console.log('Processing...')
return;
}
if (usersToDeleteQueue.length > 0) {
removeNext();
setTimeout(function(){
processQueue();
},1000);
} else {
getMore();
}
}
function removeNext() {
if (!scriptEnabled) {
console.log('Processing the next target')
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();
console.log('gear wheel clicked')
setTimeout(function(){
if (document.getElementsByClassName('layerConfirm uiOverlayButton selected') !== 'undefined') {
var confirmButton = document.getElementsByClassName('layerConfirm uiOverlayButton selected')[0];
confirmButton.click();
console.log('Unblocked!');
location.reload();
}
}, 1500);
setTimeout(function(){
if (document.getElementsByClassName('autofocus layerCancel selected') !== 'undefined') {
var batalkan = document.getElementsByClassName('autofocus layerCancel selected')[0];
batalkan.click();
console.log('reloaded!');
location.reload();
}
}, 1000);
setTimeout(function(){
location.reload();
}, 10000);
processing = true;
setTimeout(function(){
var popupRef = gearWheelHref.id;
console.log('set timeout passed')
var popupDiv = getElementByAttribute('data-ownerid',popupRef);
var popupLinks = popupDiv.getElementsByTagName('a');
for(var j=0; j<popupLinks.length; j++) {
console.log('for var passed')
if (popupLinks[j].getAttribute('href').indexOf('admins_get.php') !== -1) {
console.log('gotcha the link')
// this is the remove link
popupLinks[j].click();
console.log('Confirmation block is poped up')
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();
console.log('Unblocked!')
} 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();
// paste this script to "Custom Javascript for websites" chrome extension or Tampermonkey or Greasemonkey
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment