-
-
Save AaronRM/78b215f705e3211f8f17 to your computer and use it in GitHub Desktop.
| 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 = ['1234','11223344']; // 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(); |
Having issues with this where it will only remove half of the member list. It goes down the left or right hand column only.
Thanks :-) This script save me hours of work.
I have hundreds of IDs to exclude, but the
var excludedFbIds = ['1234','11223344']
portion has a limit on the string.
Please suggest a modification.
thank you
still works flawlessly, many thanks...
Extremely useful. I removed a group of 6.500 users with the script.
Only, i have had to restart chrome several times as it was collapsed.
To search the facebook ID i used that link: Search my facebook ID
Is there a way to modify this script to delete hidden members that do not show up on the member list? I've got only a few I need to delete, and can put their id in, but don't want to enter 100k+ ids to exclude.
It does not work for me?
Why?
Any other suggestions?
Thanks
Updated a new solution, tested on chrome: https://gist.github.com/kencarino/3be7c5ee0bec39da99a05639c0fc2673
This works buddy, thanks
1/7/2017