async () => { // Function to check if element is visible const isVisible = (elem) => { const style = window.getComputedStyle(elem); return style.display !== "none" && style.visibility !== "hidden" && style.opacity !== "0"; }; // Common selectors for popups and overlays const commonSelectors = [ // Close buttons first 'button[class*="close" i]', 'button[class*="dismiss" i]', 'button[aria-label*="close" i]', 'button[title*="close" i]', 'a[class*="close" i]', 'span[class*="close" i]', // Cookie notices '[class*="cookie-banner" i]', '[id*="cookie-banner" i]', '[class*="cookie-consent" i]', '[id*="cookie-consent" i]', // Newsletter/subscription dialogs '[class*="newsletter" i]', '[class*="subscribe" i]', // Generic popups/modals '[class*="popup" i]', '[class*="modal" i]', '[class*="overlay" i]', '[class*="dialog" i]', '[role="dialog"]', '[role="alertdialog"]', ]; // Try to click close buttons first for (const selector of commonSelectors.slice(0, 6)) { const closeButtons = document.querySelectorAll(selector); for (const button of closeButtons) { if (isVisible(button)) { try { button.click(); await new Promise((resolve) => setTimeout(resolve, 100)); } catch (e) { console.log("Error clicking button:", e); } } } } // Remove remaining overlay elements const removeOverlays = () => { // Find elements with high z-index const allElements = document.querySelectorAll("*"); for (const elem of allElements) { const style = window.getComputedStyle(elem); const zIndex = parseInt(style.zIndex); const position = style.position; if ( isVisible(elem) && (zIndex > 999 || position === "fixed" || position === "absolute") && (elem.offsetWidth > window.innerWidth * 0.5 || elem.offsetHeight > window.innerHeight * 0.5 || style.backgroundColor.includes("rgba") || parseFloat(style.opacity) < 1) ) { elem.remove(); } } // Remove elements matching common selectors for (const selector of commonSelectors) { const elements = document.querySelectorAll(selector); elements.forEach((elem) => { if (isVisible(elem)) { elem.remove(); } }); } }; // Remove overlay elements removeOverlays(); // Remove any fixed/sticky position elements at the top/bottom const removeFixedElements = () => { const elements = document.querySelectorAll("*"); elements.forEach((elem) => { const style = window.getComputedStyle(elem); if ((style.position === "fixed" || style.position === "sticky") && isVisible(elem)) { elem.remove(); } }); }; removeFixedElements(); // Remove empty block elements as: div, p, span, etc. const removeEmptyBlockElements = () => { const blockElements = document.querySelectorAll( "div, p, span, section, article, header, footer, aside, nav, main, ul, ol, li, dl, dt, dd, h1, h2, h3, h4, h5, h6" ); blockElements.forEach((elem) => { if (elem.innerText.trim() === "") { elem.remove(); } }); }; // Remove margin-right and padding-right from body (often added by modal scripts) document.body.style.marginRight = "0px"; document.body.style.paddingRight = "0px"; document.body.style.overflow = "auto"; // Wait a bit for any animations to complete await new Promise((resolve) => setTimeout(resolve, 100)); };