From e0a4b45364f039247afaba328fd0f3f80d72de66 Mon Sep 17 00:00:00 2001 From: thorsten Date: Mon, 20 Jul 2026 19:21:08 +0200 Subject: [PATCH 1/2] fix(youtube): auto-dismiss the feedback survey banner during comment deletion Google My Activity pops a modal feedback/survey dialog mid-run (typically after the first couple of deletions). Being modal, it blocks the next delete click and stalls the loop. Dismiss it at the top of each iteration by clicking its "Close this dialog" button when present. --- .../Scripts/delete-all-youtube-posts.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/CleanMyPosts/Scripts/delete-all-youtube-posts.js b/src/CleanMyPosts/Scripts/delete-all-youtube-posts.js index b24ec16..c9c0463 100644 --- a/src/CleanMyPosts/Scripts/delete-all-youtube-posts.js +++ b/src/CleanMyPosts/Scripts/delete-all-youtube-posts.js @@ -14,6 +14,18 @@ async function DeleteAllYouTubeComments(waitAfterDelete = 1000, waitBetweenDelet console.log(`[${new Date().toLocaleTimeString()}] ${msg}`); } + // A Google feedback/survey dialog can pop up mid-run and, being modal, blocks + // the next delete click. Dismiss it whenever it appears. + function dismissSurveyBanner() { + const closeBtn = document.querySelector('button[aria-label="Close this dialog"]'); + if (closeBtn && closeBtn.getBoundingClientRect().width > 0) { + closeBtn.click(); + log("[dismissSurveyBanner] Dismissed feedback/survey banner."); + return true; + } + return false; + } + async function waitForDeleteButton(maxWait = 5000, interval = 300) { const start = Date.now(); while (true) { @@ -113,6 +125,7 @@ async function DeleteAllYouTubeComments(waitAfterDelete = 1000, waitBetweenDelet let commentNumber = 1; while (failures < maxFailures) { + dismissSurveyBanner(); const found = await waitForDeleteButton(5000, 300); if (!found) { failures++; From 2ee07a93d1518a3ca66f7fe8dfde26c6576d74ab Mon Sep 17 00:00:00 2001 From: thorsten Date: Mon, 20 Jul 2026 19:26:50 +0200 Subject: [PATCH 2/2] fix(youtube): also dismiss the feedback survey banner while unliking videos Apply the same modal feedback/survey dialog dismissal to the liked-videos unlike loop as a safeguard against the Google-wide feedback widget. --- .../Scripts/delete-all-youtube-likes.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/CleanMyPosts/Scripts/delete-all-youtube-likes.js b/src/CleanMyPosts/Scripts/delete-all-youtube-likes.js index 8a890f2..6ed333e 100644 --- a/src/CleanMyPosts/Scripts/delete-all-youtube-likes.js +++ b/src/CleanMyPosts/Scripts/delete-all-youtube-likes.js @@ -14,6 +14,18 @@ async function DeleteAllYouTubeLikes(waitAfterDelete = 1000, waitBetweenDeleteAt console.log(`[${new Date().toLocaleTimeString()}] ${msg}`); } + // A Google feedback/survey dialog can pop up mid-run and, being modal, blocks + // the next click. Dismiss it whenever it appears. + function dismissSurveyBanner() { + const closeBtn = document.querySelector('button[aria-label="Close this dialog"]'); + if (closeBtn && closeBtn.getBoundingClientRect().width > 0) { + closeBtn.click(); + log("[dismissSurveyBanner] Dismissed feedback/survey banner."); + return true; + } + return false; + } + // Multilingual patterns for "Remove from Liked videos" const removePatterns = [ // English @@ -299,6 +311,7 @@ async function DeleteAllYouTubeLikes(waitAfterDelete = 1000, waitBetweenDeleteAt let videoNumber = 1; while (failures < maxFailures) { + dismissSurveyBanner(); const found = await waitForVideo(5000, 300); if (!found) { failures++;