gplinks auto-skip

Remove the adclick nag and auto-click the buttons.

// ==UserScript==
// @name         gplinks auto-skip
// @author       BlazeFTL
// @namespace    http://tampermonkey.net/
// @description  Remove the adclick nag and auto-click the buttons.
// @version      2.2
// @match        *://*/*
// @supportURL   https://github.com/uBlockOrigin/uAssets/discussions/27472#discussioncomment-12725221
// @icon         https://www.google.com/s2/favicons?domain=gplinks.com
// @grant        none
// ==/UserScript==

(function () {
    'use strict';
    const button1 = document.querySelector('#VerifyBtn');
    const button2 = document.querySelector('#NextBtn');
    if (button1 && button2){

    const INTERVAL_2S = 2000;
    const INTERVAL_1S = 1000;
    const smileyExists = !!document.querySelector('.SmileyBanner');

    // 1. Set cookie_pub_plan_id to 12
    window.cookie_pub_plan_id = 12;

    // 2. Create fake iframe
    const i = document.createElement('iframe');
    i.style = 'height:0;width:0;border:0;';
    i.id = 'a';
    document.body.appendChild(i);
    i.focus();

    // 3. Ensure ad cookie is set
    function SetAdCookie() {
        const expireTime = new Date(new Date().getTime() + 2 * 60 * 1000); // 2 mins
        Cookies.set("adexp", 1, { expires: expireTime });
    }
    SetAdCookie();

    // 4. Click buttons based on timing and SmileyBanner presence
    let verifyClicked = false;
    let nextClicked = false;

    function waitForElement(selector, callback) {
        const el = document.querySelector(selector);
        if (el) {
            callback(el);
        } else {
            setTimeout(() => waitForElement(selector, callback), 500);
        }
    }

    function clickIfVisible(el) {
        if (el && el.offsetParent !== null) {
            el.click();
            return true;
        }
        return false;
    }

    function clickWithRetry(selector, flagName) {
        const el = document.querySelector(selector);
        if (!el) return;

        if (!window[flagName]) {
            const clicked = clickIfVisible(el);
            if (clicked) {
                window[flagName] = true;
            } else {
                setTimeout(() => clickWithRetry(selector, flagName), 1000);
            }
        }
    }

    if (smileyExists) {
        // Show countdown and delay verify
        const verifyBtn = document.querySelector('#VerifyBtn');
        const placeholder = document.createElement('div');
        placeholder.style.color = 'black';
        placeholder.style.fontWeight = 'bold';
        placeholder.id = 'countdown-replace';
        verifyBtn.parentNode.insertBefore(placeholder, verifyBtn);
        verifyBtn.style.display = 'none';

        let countdown = 15;
        placeholder.innerText = `Please wait ${countdown} seconds`;

        const timer = setInterval(() => {
            countdown--;
            placeholder.innerText = `Please wait ${countdown} seconds`;

            if (countdown <= 0) {
                clearInterval(timer);
                verifyBtn.style.display = 'inline-block';
                placeholder.remove();
                clickWithRetry('#VerifyBtn', 'verifyClicked');
                setTimeout(() => clickWithRetry('.NextBtn', 'nextClicked'), 1000);
            }
        }, INTERVAL_1S);
    } else {
        // Wait 16 seconds, then click #VerifyBtn, then 1s later .NextBtn
        setTimeout(() => {
            clickWithRetry('#VerifyBtn', 'verifyClicked');
            setTimeout(() => clickWithRetry('.NextBtn', 'nextClicked'), 1000);
        }, 16000);
    }

    }
})();