/** @param {number} milliSeconds */ async function sleep(milliSeconds) { return new Promise((resolve) => { setTimeout(resolve, milliSeconds); }); } const elements = /** @type {HTMLSpanElement[]} */ ([ ...document.querySelectorAll('span[data-action$="/mark-as-not-watched/"]'), ]); const tabURL = window.location.href; const needle = /letterboxd\.com\/[^/]+\/films\/rated\/none\//; (async () => { console.clear(); if (!needle.test(tabURL)) { throw new Error( 'Only works for pages like "https://letterboxd.com/your-username/films/rated/none/".', ); } for (const [index, element] of elements.entries()) { console.log(`[${index + 1}/${elements.length}]: ${element.dataset.action}`); element.click(); await sleep(1000); } })().catch((exception) => console.error(exception));