ເຄີຍຕ້ອງການທີ່ຈະຕິດຕາມຫລືບຸກຄົນທີ່ບໍ່ສະ ໝັກ ໃຈໃນ Twitter ຢ່າງຮີບດ່ວນໂດຍບໍ່ມີຄວາມຫຍຸ້ງຍາກໃນການກົດປຸ່ມຕິດຕາມ / ປຸ່ມທີ່ບໍ່ຖືກຕ້ອງແຕ່ລະຄົນບໍ? ຂ້າງລຸ່ມນີ້ແມ່ນລະຫັດທີ່ທ່ານສາມາດໃຊ້ເພື່ອເຮັດຕາມຫລືຕັ້ງມະຫາຊົນທີ່ບໍ່ຕິດຕາມໃນ Twitter. ແຕ່ຢ່າລືມທີ່ຈະໃຊ້ສະຄຣິບ Twitter ທີ່ບໍ່ຖືກຕ້ອງ ສຳ ລັບການ ນຳ ໃຊ້ / ທົດສອບແລະເຄົາລົບສິດທິຂອງ Twitter ຂອງທ່ານເອງ.
Twitter ມະຫາຊົນຕິດຕາມຕົວອັກສອນ
ເພື່ອໃຊ້ສະຄຣິບ Twitter ຂອງມະຫາຊົນທ່ານຕ້ອງໄດ້ໃຊ້ Chrome browser.
- ເປີດ Twitter ແລະເຂົ້າສູ່ລະບົບບັນຊີຂອງທ່ານ.
- ເປີດໂປຣໄຟລ໌ຂອງໃຜຜູ້ໜຶ່ງ.
- ຄລິກໃສ່ຜູ້ຕິດຕາມ ແລະທ່ານຈະເຫັນລາຍຊື່ຄົນທີ່ຕິດຕາມໂປຣໄຟລ໌ທີ່ທ່ານເລືອກ.
- ເລື່ອນລົງສອງສາມເທື່ອເພື່ອໂຫລດໂປຣໄຟລ໌ເພີ່ມເຕີມໃສ່ລາຍຊື່.
- ຫນັງສືພິມ SHIFT + CTRL + I (Windows) ຫຼື CMD + OPT + I (Mac) ເທິງແປ້ນພິມຂອງທ່ານ ຫຼືຄລິກຂວາໃສ່ບ່ອນໃດກໍໄດ້ໃນຕົວທ່ອງເວັບ ແລະເລືອກ “Inspect Element” ຫຼືຄລິກໃສ່ໄອຄອນເມນູ Chrome ຢູ່ມຸມຂວາເທິງສຸດຂອງໜ້າຕ່າງບຣາວເຊີຂອງທ່ານ ແລະຈາກນັ້ນໄປທີ່ ເຄື່ອງມືເພີ່ມເຕີມ> ເຄື່ອງມືພັດທະນາ.
- ເລືອກແຖບ "Console".
- ຄັດລອກແລະວາງລະຫັດຂ້າງລຸ່ມນີ້ເພື່ອ console ແລະກົດ "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 ທີ່ບໍ່ຕັ້ງໃຈມະຫາຊົນ
ເພື່ອໃຊ້ສະຄິບ Twitter ທີ່ບໍ່ຖືກຕ້ອງຫລາຍທ່ານຕ້ອງໃຊ້ browser browser.
- ເປີດ Twitter ແລະເຂົ້າສູ່ລະບົບບັນຊີຂອງທ່ານ.
- ກົດຕິດຕາມ ແລ້ວເຈົ້າຈະເຫັນລາຍຊື່ຄົນທີ່ເຈົ້າຕິດຕາມ.
- ເລື່ອນລົງສອງສາມເທື່ອເພື່ອໂຫລດໂປຣໄຟລ໌ເພີ່ມເຕີມໃສ່ລາຍຊື່.
- ຫນັງສືພິມ SHIFT + CTRL + I (Windows) ຫຼື CMD + OPT + I (Mac) ເທິງແປ້ນພິມຂອງທ່ານ ຫຼືຄລິກຂວາໃສ່ບ່ອນໃດກໍໄດ້ໃນຕົວທ່ອງເວັບ ແລະເລືອກ “Inspect Element” ຫຼືຄລິກໃສ່ໄອຄອນເມນູ Chrome ຢູ່ມຸມຂວາເທິງສຸດຂອງໜ້າຕ່າງບຣາວເຊີຂອງທ່ານ ແລະຈາກນັ້ນໄປທີ່ ເຄື່ອງມືເພີ່ມເຕີມ> ເຄື່ອງມືພັດທະນາ
- ເລືອກແຖບ "Console".
ກ. Unfollow ຜູ້ທີ່ບໍ່ຕິດຕາມຄືນ
ເພື່ອຍົກເລີກການຕິດຕາມຄົນເຫຼົ່ານັ້ນທີ່ບໍ່ໄດ້ຕິດຕາມທ່ານຄືນ, ຫຼັງຈາກນັ້ນໃຫ້ສຳເນົາ ແລະວາງລະຫັດດ້ານລຸ່ມເພື່ອຄອນໂຊ ແລະກົດ “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();
ຂ. ບໍ່ເຮັດວຽກທັງ ໝົດ
ເພື່ອເຊົາຕິດຕາມຄົນທັງໝົດທີ່ເຈົ້າກຳລັງຕິດຕາມຢູ່, ຈາກນັ້ນສຳເນົາ ແລະວາງລະຫັດລຸ່ມນີ້ໃສ່ຄອນໂຊ ແລະກົດ “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();
})();
ຂອບໃຈສິ່ງທີ່ຂ້ອຍກໍາລັງຊອກຫາ.
ນີ້ແມ່ນຂໍ້ມູນທີ່ຍິ່ງໃຫຍ່. ຕົວເລກທີ່ບໍ່ໄດ້ຕິດຕາມປະຈໍາວັນແມ່ນຫຍັງກ່ອນທີ່ທ່ານຈະລະເມີດກົດລະບຽບການບໍ່ຕິດຕາມ.
ວ້າວ!
ເຮັດໄດ້ດີ Victor! ມັນເຮັດວຽກ. ຄໍາແນະນໍາໃດໆທີ່ຈະເຊົາຕິດຕາມຕົວຈັບທີ່ບໍ່ເຄື່ອນໄຫວຢູ່ໃນ Twitter? ຂ້າພະເຈົ້າຫມາຍຄວາມວ່າ handles ຜູ້ທີ່ບໍ່ໄດ້ tweeted ສໍາລັບໃຫ້ເວົ້າວ່າ 2 ປີຫຼືຫຼາຍກວ່ານັ້ນ? ຂ້ອຍຈະຂອບໃຈຄໍາຕອບຂອງເຈົ້າ. ຂ້ອຍຈະສືບຕໍ່ກວດເບິ່ງຄືນ.