-
-
Save syareez/a3ccfd9ce25f60442c8814d6db4f1280 to your computer and use it in GitHub Desktop.
Open up browser console, for Chrome, hit F12 and copy-paste and enter this | |
$("a").filter(function(index){return $(this).text()==="unsave"}).click();setTimeout(function(){location.reload();},500); | |
Repeat until all items are unsaved. |
You should change that to "unsave", since that is the word it's used now for deleting saved posts. I pasted the command with the change:
$("a").filter(function(index){return $(this).text()==="unsave"}).click();setTimeout(function(){location.reload();},500);
Updated:
Run:
var jq = document.createElement('script');
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
// ... give time for script to load
And
$("button").filter(function(index){return $(this).text()==="unsave"}).click();setTimeout(function(){location.reload();},500);
It could be improved to one script but I'm fine with it like this
Grease monkey script to do the same on old interface
// ==UserScript==
// @name Unnamed Script 400702
// @version 1
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @include *reddit*user*
// @grant unsafeWindow
// ==/UserScript==
window.addEventListener('load', function() {
setInterval ( function () {
var clickEvent = document.createEvent ("HTMLEvents");
clickEvent.initEvent ("click", true, true);
$("a:contains('unsave')")[0].dispatchEvent (clickEvent);
}, 40);
setTimeout(function(){location.reload();},5000);
}, false);
Grease monkey script to do the same on old interface
// ==UserScript== // @name Unnamed Script 400702 // @version 1 // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js // @include *reddit*user* // @grant unsafeWindow // ==/UserScript== window.addEventListener('load', function() { setInterval ( function () { var clickEvent = document.createEvent ("HTMLEvents"); clickEvent.initEvent ("click", true, true); $("a:contains('unsave')")[0].dispatchEvent (clickEvent); }, 40); setTimeout(function(){location.reload();},5000); }, false);
thanks
Is there a way to automate the script without repeat copy/paste?
Array.from(document.querySelectorAll("button")).forEach(
(el) => {
if (el.innerText === "unsave") el.click()
})
Without jquery and reload, just to delete whatever you see on the "saved" page.
Array.from(document.querySelectorAll("button")).forEach( (el) => { if (el.innerText === "unsave") el.click() })
Without jquery and reload, just to delete whatever you see on the "saved" page.
This still works as of 4/2023; only edit is the button text should be capitalized.
if (el.innerText === "Unsave") el.click()
I just had to refresh the page and rerun the function a couple times since Reddit does dynamic loading as you scroll
You should change that to "unsave", since that is the word it's used now for deleting saved posts. I pasted the command with the change:
$("a").filter(function(index){return $(this).text()==="unsave"}).click();setTimeout(function(){location.reload();},500);
This still works as of 5/2023 on old reddit!
@alwei1 Indeed it does—thanks for confirming!
Would there be any way to omit saves from a particular sub? I'd love to be able to clear out all of my saves except /r/dogpictures
If you're using old reddit, you can paste this in your console once you're in the saved tab:
// Function to unsave Reddit items with randomized delays and batch pauses
function unsaveRedditItems() {
// Find all unsave links
const unsaveLinks = $("a").filter(function(index) {
return $(this).text() === "unsave";
});
// Counter for current item
let currentItem = 0;
// Batch size configuration
const BATCH_SIZE = 50;
const BATCH_BREAK_TIME = 60000; // 60 second break between batches
// Function to get random delay between 2-5 seconds (2000-5000ms)
function getRandomDelay() {
return Math.floor(Math.random() * (5000 - 2000 + 1)) + 2000;
}
// Function to process one item
function processNextItem() {
if (currentItem < unsaveLinks.length) {
// Click the current unsave link
$(unsaveLinks[currentItem]).click();
// Get random delay for next action
const nextDelay = getRandomDelay();
// Check if we need a batch break
const isEndOfBatch = (currentItem + 1) % BATCH_SIZE === 0;
const actualDelay = isEndOfBatch ? BATCH_BREAK_TIME : nextDelay;
// Log progress with appropriate message
if (isEndOfBatch && currentItem + 1 < unsaveLinks.length) {
console.log(
`Completed batch of ${BATCH_SIZE}. ` +
`Taking a ${BATCH_BREAK_TIME/1000} second break...`
);
} else {
console.log(
`Unsaved item ${currentItem + 1} of ${unsaveLinks.length}. ` +
`Next action in ${(actualDelay/1000).toFixed(1)}s`
);
}
// Move to next item after delay
currentItem++;
setTimeout(processNextItem, actualDelay);
} else {
// Reload page when done
console.log("Finished unsaving items on this page");
setTimeout(() => location.reload(), 3000);
}
}
// Start processing if there are items to unsave
if (unsaveLinks.length > 0) {
console.log(`Found ${unsaveLinks.length} items to unsave`);
// Add initial random delay before starting
const initialDelay = getRandomDelay();
console.log(`Starting in ${(initialDelay/1000).toFixed(1)}s...`);
setTimeout(processNextItem, initialDelay);
} else {
console.log("No items found to unsave");
}
}
// Run the function
unsaveRedditItems();
You might have to make the breaks between batches longer to avoid triggering the rate limiter. The random range between each action might also not be necessary. It did the job for me.
https://github.com/j0be/PowerDeleteSuite
So this still has lots of comments. This repo above is what you want. It's great. You'll see.
If used old.reddit.com use:
$("a").filter(function(index){return $(this).text()==="delete from saved"}).click();setTimeout(function(){location.reload();},500);