Skip to content

Instantly share code, notes, and snippets.

@syareez
Created January 6, 2018 11:54
Show Gist options
  • Save syareez/a3ccfd9ce25f60442c8814d6db4f1280 to your computer and use it in GitHub Desktop.
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.
@TasseDeCafe
Copy link

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.

@rlewkowicz
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment