From 24d7cc5005237be9256b137bdf92bb1d3475c30d Mon Sep 17 00:00:00 2001 From: montes70 Date: Mon, 12 May 2025 19:42:21 +0800 Subject: [PATCH] Create Delete Delete --- Delete | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Delete diff --git a/Delete b/Delete new file mode 100644 index 00000000..ec682e10 --- /dev/null +++ b/Delete @@ -0,0 +1,70 @@ +/** + * 1. open cloudflare dashboard, choose domain, go to DNS section + * 2. open browser's dev tool (via F12 or inspect or however) + * 3. in devtool, go to console tab + * 4. clear all existing messages + * 5. paste all script below + * 6. hit enter and watch + * 7. script only delete records displayed in the screen + * 8. if want to delete more, refresh browser and run script again + * + * credit: edited from https://gist.github.com/AidasK/9550e1eb97b3b121c5122aef0d778608 + */ + +deleteAllRecords(); + +async function deleteAllRecords() { + let e; + filterEditButtons().forEach((e) => e.click()); + while (e = filterDeleteButtons()[0]) { + e.click(); + await confirmDelete(); + } +} +function filterDeleteButtons() { + return [ + ...[...document.querySelectorAll('a')].filter((e) => e.innerHTML === 'Delete'), + ...[...document.querySelectorAll('button')].filter((e) => e.innerHTML === 'Delete'), + ]; +} +function filterEditButtons() { + return [ + ...document.querySelectorAll('a'),//old layout + ...document.querySelectorAll('button') + ].filter((e) => e.innerHTML.includes('Edit')); +} +function confirmDelete(iteration) { + iteration = iteration || 1; + return new Promise((resolve, reject) => { + setTimeout(async () => { + let button = [...document.querySelectorAll('button')].filter((e) => e.innerHTML === 'Delete')[0]; + if (button) { + button.click(); + await waitConfirmDelete(); + resolve(); + } else if (iteration > 30) { + console.log('failed confirmDelete'); + reject(); + } else { + confirmDelete(iteration + 1) + } + }, 100); + }); +} +function waitConfirmDelete() { + return new Promise((resolve, reject) => { + let iteration = 1; + let i = setInterval(() => { + if (iteration++ > 30) { + clearInterval(i); + reject(); + return; + } + if ([...document.querySelectorAll('button')].filter((e) => e.innerHTML === 'Delete')[0]) { + return; + } + clearInterval(i); + resolve(); + }, 100) + }); +}