Greasy Fork is available in English.
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);
}
}
})();