Wake wafuna ukulandela noma ukungabeki abantu ku-Twitter ngokhahlo ngaphandle kokuhlupheka kokuchofoza izinkinobho zomuntu ngamunye / izinkomba ezingenasisekelo? Ngezansi kunamakhodi ongawasebenzisa ukulandela isisindo noma ukucwilisa abantu abaningi ku-Twitter. Kepha khumbula ukusebenzisa le mibhalo elandelwayo ye-Twitter / / ye-unsollow for ukusetshenziswa kwakho siqu / ukuhlola nokuhlonipha amalungelo we-Twitter.
Isisindo se-Twitter silandela umbhalo
Ukuze usebenzise iskripthi sokulandela isisindo se-Twitter kufanele usebenzise isiphequluli se-Chrome.
- Vula Twitter bese ungena ku-akhawunti yakho.
- Vula iphrofayela yomunye.
- Chofoza kokuthi Abalandeli futhi uzobona uhlu lwabantu abalandela iphrofayela yakho oyikhethile.
- Skrolela phansi izikhathi ezimbalwa ukuze ulayishe amaphrofayili amaningi ohlwini.
- Cindezela SHIFT + CTRL + I (Windows) noma I-CMD + OPT + I (Mac) kukhibhodi yakho noma chofoza kwesokudla noma yikuphi esipheqululini bese ukhetha okuthi “Hlola i-Element” noma uchofoze isithonjana semenyu ye-Chrome ekhoneni eliphezulu kwesokudla sewindi lesiphequluli sakho bese uya ku. Amathuluzi amaningi> Amathuluzi Wonjiniyela.
- Khetha ithebhu "Console".
- Kopisha futhi unamathisele ikhodi engezansi ukuze ududuze bese ucindezela u-“Enter”.
let btns = document.querySelectorAll("[data-testid]")
let followBtns = Array.from(btns).filter(btn => {
return btn.getAttribute('data-testid').includes('follow')
})
for (let i = 1; i <= followBtns.length; i++) {
setTimeout(() => {
followBtns[i - 1].click()
}, 1000 * i);
}
Isikripthi se-Twitter esiningi esingashiwongo
Ukuze usebenzise iscript esingahleliwe se-Twitter kufanele usebenzise isiphequluli se-Chrome.
- Vula Twitter bese ungena ku-akhawunti yakho.
- Chofoza okuthi Ukulandela futhi uzobona uhlu lwabantu obalandelayo.
- Skrolela phansi izikhathi ezimbalwa ukuze ulayishe amaphrofayili amaningi ohlwini.
- Cindezela SHIFT + CTRL + I (Windows) noma I-CMD + OPT + I (Mac) kukhibhodi yakho noma chofoza kwesokudla noma yikuphi esipheqululini bese ukhetha okuthi “Hlola i-Element” noma uchofoze isithonjana semenyu ye-Chrome ekhoneni eliphezulu kwesokudla sewindi lesiphequluli sakho bese uya ku. Amathuluzi amaningi> Amathuluzi Wonjiniyela
- Khetha ithebhu "Console".
a. Susa ukulandela okungalandeli emuva
Ukuze uyeke ukulandela bonke labo bantu abangakulandeli emuva, kopisha futhi unamathisele ikhodi engezansi ukuze ududuze bese ucindezela u-“Enter”.
var LANGUAGE = "EN"; //NOTE: change it to use your language!
var WORDS =
{
//English language:
EN:
{
followsYouText: "Follows you", //Text that informs that follows you.
followingButtonText: "Following", //Text of the "Following" button.
confirmationButtonText: "Unfollow" //Text of the confirmation button. I am not totally sure.
},
//Spanish language:
ES:
{
followsYouText: "Te sigue", //Text that informs that follows you.
followingButtonText: "Siguiendo", //Text of the "Following" button.
confirmationButtonText: "Dejar de seguir" //Text of the confirmation button. I am not totally sure.
}
//NOTE: if needed, add your language here...
}
var UNFOLLOW_FOLLOWERS = false; //If set to true, it will also remove followers (unless they are skipped).
var MS_PER_CYCLE = 10; //Milliseconds per cycle (each call to 'performUnfollow').
var MAXIMUM_UNFOLLOW_ACTIONS_PER_CYCLE = null; //Maximum of unfollow actions to perform, per cycle (each call to 'performUnfollow'). Set to 'null' to have no limit.
var MAXIMUM_UNFOLLOW_ACTIONS_TOTAL = null; //Maximum of unfollow actions to perform, in total (among all calls to 'performUnfollow'). Set to 'null' to have no limit.
var SKIP_USERS = //Users that we do not want to unfollow (even if they are not following you back):
[
//Place the user names that you want to skip here (they will not be unfollowed):
"user_name_to_skip_example_1",
"user_name_to_skip_example_2",
"user_name_to_skip_example_3"
];
SKIP_USERS.forEach(function(value, index) { SKIP_USERS[index] = value.toLowerCase(); }); //Transforms all the user names to lower case as it will be case insensitive.
var _UNFOLLOWED_TOTAL = 0; //Keeps the number of total unfollow actions performed. Read-only (do not modify).
//Function that unfollows non-followers on Twitter:
var performUnfollow = function(followsYouText, followingButtonText, confirmationButtonText, unfollowFollowers, maximumUnfollowActionsPerCycle, maximumUnfollowActionsTotal)
{
var unfollowed = 0;
followsYouText = followsYouText || WORDS.EN.followsYouText; //Text that informs that follows you.
followingButtonText = followingButtonText || WORDS.EN.followingButtonText; //Text of the "Following" button.
confirmationButtonText = confirmationButtonText || WORDS.EN.confirmationButtonText; //Text of the confirmation button.
unfollowFollowers = typeof(unfollowFollowers) === "undefined" || unfollowFollowers === null ? UNFOLLOW_FOLLOWERS : unfollowFollowers;
maximumUnfollowActionsTotal = maximumUnfollowActionsTotal === null || !isNaN(parseInt(maximumUnfollowActionsTotal)) ? maximumUnfollowActionsTotal : MAXIMUM_UNFOLLOW_ACTIONS_TOTAL || null;
maximumUnfollowActionsTotal = !isNaN(parseInt(maximumUnfollowActionsTotal)) ? parseInt(maximumUnfollowActionsTotal) : null;
maximumUnfollowActionsPerCycle = maximumUnfollowActionsPerCycle === null || !isNaN(parseInt(maximumUnfollowActionsPerCycle)) ? maximumUnfollowActionsPerCycle : MAXIMUM_UNFOLLOW_ACTIONS_PER_CYCLE || null;
maximumUnfollowActionsPerCycle = !isNaN(parseInt(maximumUnfollowActionsPerCycle)) ? parseInt(maximumUnfollowActionsPerCycle) : null;
//Looks through all the containers of each user:
var totalLimitReached = false;
var localLimitReached = false;
var userContainers = document.querySelectorAll('[data-testid=UserCell]');
Array.prototype.filter.call
(
userContainers,
function(userContainer)
{
//If we have reached a limit previously, exits silently:
if (totalLimitReached || localLimitReached) { return; }
//If we have reached the maximum desired number of total unfollow actions, exits:
else if (maximumUnfollowActionsTotal !== null && _UNFOLLOWED_TOTAL >= maximumUnfollowActionsTotal) { console.log("Exiting! Limit of unfollow actions in total reached: " + maximumUnfollowActionsTotal); totalLimitReached = true; return; }
//...otherwise, if we have reached the maximum desired number of local unfollow actions, exits:
else if (maximumUnfollowActionsPerCycle !== null && unfollowed >= maximumUnfollowActionsPerCycle) { console.log("Exiting! Limit of unfollow actions per cycle reached: " + maximumUnfollowActionsPerCycle); localLimitReached = true; return; }
//Checks whether the user is following you:
if (!unfollowFollowers)
{
var followsYou = false;
Array.from(userContainer.querySelectorAll("*")).find
(
function(element)
{
if (element.textContent === followsYouText) { followsYou = true; }
}
);
}
else { followsYou = false; } //If we want to also unfollow followers, we consider it is not a follower.
//If the user is not following you (or we also want to unfollow followers):
if (!followsYou)
{
//Finds the user name and checks whether we want to skip this user or not:
var skipUser = false;
var userName = "";
Array.from(userContainer.querySelectorAll("[href^='/']")).find
(
function (element)
{
if (skipUser) { return; }
if (element.href.indexOf("search?q=") !== -1 || element.href.indexOf("/") === -1) { return; }
userName = element.href.substring(element.href.lastIndexOf("/") + 1).toLowerCase();
Array.from(element.querySelectorAll("*")).find
(
function (subElement)
{
if (subElement.textContent.toLowerCase() === "@" + userName)
{
if (SKIP_USERS.indexOf(userName) !== -1)
{
console.log("We want to skip: " + userName);
skipUser = true;
}
}
}
);
}
);
//If we do not want to skip the user:
if (!skipUser)
{
//Finds the unfollow button:
Array.from(userContainer.querySelectorAll('[role=button]')).find
(
function(element)
{
//If the unfollow button is found, clicks it:
if (element.textContent === followingButtonText)
{
console.log("* Unfollowing: " + userName);
element.click();
unfollowed++;
_UNFOLLOWED_TOTAL++;
}
}
);
}
}
}
);
//If there is a confirmation dialog, press it automatically:
Array.from(document.querySelectorAll('[role=button]')).find //Finds the confirmation button.
(
function(element)
{
//If the confirmation button is found, clicks it:
if (element.textContent === confirmationButtonText)
{
element.click();
}
}
);
return totalLimitReached ? null : unfollowed; //If the total limit has been reached, returns null. Otherwise, returns the number of unfollowed people.
}
//Scrolls and unfollows non-followers, constantly:
var scrollAndUnfollow = function()
{
window.scrollTo(0, document.body.scrollHeight);
var unfollowed = performUnfollow(WORDS[LANGUAGE].followsYouText, WORDS[LANGUAGE].followingButtonText, WORDS[LANGUAGE].confirmationButtonText, UNFOLLOW_FOLLOWERS, MAXIMUM_UNFOLLOW_ACTIONS_PER_CYCLE, MAXIMUM_UNFOLLOW_ACTIONS_TOTAL); //For English, you can try to call it without parameters.
if (unfollowed !== null) { setTimeout(scrollAndUnfollow, MS_PER_CYCLE); }
else { console.log("Total desired of unfollow actions performed!"); }
};
scrollAndUnfollow();
b. Ungafakwa kwesokunxele konke
Ukuze uyeke ukulandela bonke labo bantu obalandelayo, kopisha futhi unamathisele ikhodi engezansi ukuze ududuze bese ucindezela u-“Enter”.
(() => {
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();
})();
Ngiyabonga ngqo engangikufuna.
Lolu ulwazi olukhulu. Ithini inombolo yansuku zonke yokungalandeli ngaphambi kokuthi wephule imithetho yokungalandeli.
Hewu!
Wenze kahle Victor! Kwasebenza. Noma yimaphi amathiphu wokuyeka ukulandela izibambo ezingasebenzi ku-Twitter? I mean izibambo abangazange tweet for let say 2years noma ngaphezulu? Ngizoyithokozela impendulo yakho. Ngizoqhubeka ngibheka futhi.