// Unfollow everyone on twitter.com, by Jamie Mason (https://twitter.com/fold_left) | |
// https://gist.github.com/JamieMason/7580315 | |
// | |
// 1. Go to https://twitter.com/YOUR_USER_NAME/following | |
// 2. Open the Developer Console. (COMMAND+ALT+I on Mac) | |
// 3. Paste this into the Developer Console and run it | |
// | |
// Last Updated: 09 April 2020 | |
(() => { | |
const $followButtons = '[data-testid$="-unfollow"]'; | |
const $confirmButton = '[data-testid="confirmationSheetConfirm"]'; | |
const retry = { | |
count: 0, | |
limit: 3, | |
}; | |
const scrollToTheBottom = () => window.scrollTo(0, document.body.scrollHeight); | |
const retryLimitReached = () => retry.count === retry.limit; | |
const addNewRetry = () => retry.count++; | |
const sleep = ({ seconds }) => | |
new Promise((proceed) => { | |
console.log(`WAITING FOR ${seconds} SECONDS...`); | |
setTimeout(proceed, seconds * 1000); | |
}); | |
const unfollowAll = async (followButtons) => { | |
console.log(`UNFOLLOWING ${followButtons.length} USERS...`); | |
await Promise.all( | |
followButtons.map(async (followButton) => { | |
followButton && followButton.click(); | |
await sleep({ seconds: 1 }); | |
const confirmButton = document.querySelector($confirmButton); | |
confirmButton && confirmButton.click(); | |
}) | |
); | |
}; | |
const nextBatch = async () => { | |
scrollToTheBottom(); | |
await sleep({ seconds: 1 }); | |
const followButtons = Array.from(document.querySelectorAll($followButtons)); | |
const followButtonsWereFound = followButtons.length > 0; | |
if (followButtonsWereFound) { | |
await unfollowAll(followButtons); | |
await sleep({ seconds: 2 }); | |
return nextBatch(); | |
} else { | |
addNewRetry(); | |
} | |
if (retryLimitReached()) { | |
console.log(`NO ACCOUNTS FOUND, SO I THINK WE'RE DONE`); | |
console.log(`RELOAD PAGE AND RE-RUN SCRIPT IF ANY WERE MISSED`); | |
} else { | |
await sleep({ seconds: 2 }); | |
return nextBatch(); | |
} | |
}; | |
nextBatch(); | |
})(); |
in what respect @saamhanza? like what each line does?
Thank you for getting back to me
Yes, or a video you could point me to that gives some sort of a walkthrough showing how I could replicate this for another site for example.
Yes, or a video you could point me to that gives some sort of a walkthrough showing how I could replicate this for another site for example.
@saamhanza here is a commented version of this script to help understand how it works. As far as replicating this process for other sites, a quick Google Search has come up with this Browser Automation With Javascript article which looks a good fit.
@saamhanza here is a commented version of this script to help understand how it works. As far as replicating this process for other sites, a quick Google Search has come up with this Browser Automation With Javascript article which looks a good fit.
Huge thank you for this Jamie!
you're welcome, good luck learning the Web
this is beautiful! did exactly as it says on the tin
Legend, thank you so much!
in what respect @saamhanza? like what each line does?