Puas xav tau ua raws los yog unfollow tus neeg hauv Twitter tawm tsam tsis muaj qhov tsis muaj kev cuam tshuam ntawm kev nias tus neeg ua raws / cov khawm tsis raug? Hauv qab no yog cov lis dej num uas koj tuaj yeem siv los ua raws huab hwm coj los yog ua kom tsis muaj neeg coob hauv Twitter. Tab sis nco ntsoov siv cov Twitter no ua raws / siv cov ntawv sau rau koj tus kheej siv / kuaj thiab hwm Twitter cov cai.
Twitter pawg ua raws tsab ntawv
Yuav kom khiav Twitter loj ua raws li tsab ntawv koj yuav tsum siv Chrome browser.
- Qhib Twitter thiab nkag mus rau koj tus account.
- Qhib ib tug neeg tus profile.
- Nyem rau Followers thiab koj yuav pom cov npe ntawm cov neeg uas ua raws li koj qhov profile uas koj xaiv.
- Scroll cia ob peb zaug kom thauj khoom ntxiv rau cov npe.
- Xovxwm SHIFT + CTRL + Kuv (Qhov rai) los yog CMD + OPT + Kuv (Mac) ntawm koj cov keyboard lossis txoj nyem rau txhua qhov chaw ntawm qhov browser thiab xaiv "Tshuaj Element" lossis nyem rau ntawm Chrome ntawv qhia zaub mov icon nyob rau sab xis saum toj ntawm koj lub qhov rais browser thiab tom qab ntawd mus rau Cov cuab yeej ntau dua> Cov Cuab Yeej Tsim Tawm.
- Xaiv lub "Console" tab.
- Luam thiab paste cov cai hauv qab no rau console thiab nias "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);
}
Twitter pawg unfollow tsab ntawv
Txhawm rau khiav Twitter loj unfollow tsab ntawv koj yuav tsum siv Chrome browser.
- Qhib Twitter thiab nkag mus rau koj tus account.
- Nyem rau Ua raws thiab koj yuav pom cov npe ntawm cov neeg uas koj tab tom ua raws.
- Scroll cia ob peb zaug kom thauj khoom ntxiv rau cov npe.
- Xovxwm SHIFT + CTRL + Kuv (Qhov rai) los yog CMD + OPT + Kuv (Mac) ntawm koj cov keyboard lossis txoj nyem rau txhua qhov chaw ntawm qhov browser thiab xaiv "Tshuaj Element" lossis nyem rau ntawm Chrome ntawv qhia zaub mov icon nyob rau sab xis saum toj ntawm koj lub qhov rais browser thiab tom qab ntawd mus rau Cov cuab yeej ntau dua> Cov Cuab Yeej Tsim Tawm
- Xaiv lub "Console" tab.
a. Unfollow cov uas tsis tom qab rov qab
Txhawm rau unfollow tag nrho cov neeg uas tsis ua raws koj rov qab, tom qab ntawd luam thiab muab cov lej hauv qab no rau console thiab nias "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. Unfollow tag nrho
Txhawm rau unfollow tag nrho cov neeg koj tab tom ua raws, tom qab ntawd luam tawm thiab muab cov lej hauv qab no rau console thiab nias "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();
})();
Ua tsaug raws nraim qhov kuv tab tom nrhiav.
Qhov no yog cov ntaub ntawv zoo heev. Dab tsi yog tus naj npawb niaj hnub unfollow ua ntej koj ua txhaum cai unfollow.
wow!
Nyob zoo Victor! Nws ua haujlwm. Puas muaj cov lus qhia rau unfollow inactive tes ntawm Twitter? Kuv txhais hais tias cov lis haujlwm uas tsis tau tweeted rau cia hais 2 xyoos lossis ntau dua? Kuv yuav txaus siab rau koj cov lus teb. Kuv yuav rov xyuas dua.