diff --git a/GreaterGood CTG AutoClicker.js b/GreaterGood CTG AutoClicker.js index bbcce34d10d04695a527db103d71a402eadd8b75..1df361c202926127a6222558967368394a15b172 100644 --- a/GreaterGood CTG AutoClicker.js +++ b/GreaterGood CTG AutoClicker.js @@ -5,7 +5,7 @@ // @description Automatically clicks through all the buttons on all subsites of the GreaterGood ClickToGive program every two hours. // @description:de Klickt sich automatisch alle zwei Std. durch alle Buttons auf allen Seiten des GreaterGood-ClickToGive-Programms. -// @version 2.1.1 +// @version 3.0.0 // @copyright 2023+, Jan G. (Rsge) // @license Mozilla Public License 2.0 // @icon https://http-aws.greatergood.com/img/ggc/favicon-96x96.png @@ -13,66 +13,66 @@ // @namespace https://github.com/Rsge // @homepageURL https://github.com/Rsge/GreaterGood-CTG-AutoClicker // @supportURL https://github.com/Rsge/GreaterGood-CTG-AutoClicker/issues -// @updateURL https://greasyfork.org/scripts/433055-greatergood-ctg-autoclicker/code/GreaterGood%20CTG%20AutoClicker.user.js -// @downloadURL https://greasyfork.org/scripts/433055-greatergood-ctg-autoclicker/code/GreaterGood%20CTG%20AutoClicker.user.js -// @match https://greatergood.com/clicktogive/* -// @match https://greatergood.com/clickToGive/* -// @match https://*.greatergood.com/clicktogive/* -// @match https://*.greatergood.com/clickToGive/* +// @match https://greatergood.com/* +// @match https://theanimalrescuesite.com/* // @run-at document-idle // @grant none // ==/UserScript== -(function () { +(async function () { 'use strict'; // Max amount of seconds to wait before clicking button - const MAX_RANDOM_TO_CLICK_SECONDS = 3; + const MAX_RANDOM_TO_CLICK_SECONDS = 4; + // Amount of seconds to wait for site to load after click + const WAIT_SECONDS = 3 // Minutes between possible click-throughs const INTERVAL_MINUTES = 120; - - // On button site, click button. - let i; - let buttons = document.getElementsByTagName("BUTTON"); - let buttonFound = false; - for (i = 0; i < buttons.length; i++) { - let buttonHTML = buttons[i].innerHTML; - //console.log(buttonHTML); - if (buttonHTML == "Click to Give - it's FREE!") { - buttonFound = true; - break; - } - } - if (buttonFound) { - let millisecondsToClick = (Math.floor(Math.random() * MAX_RANDOM_TO_CLICK_SECONDS) + 1) * 1000; - setTimeout(function(){buttons[i].click()}, millisecondsToClick); - return; + // Basic function + function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); } - // On thanks site, choose new site if not all are already clicked. - let links = document.getElementsByTagName("A"); - for (i = 0; i < links.length; i++) { - let linkClass = links[i].className; - //console.log(linkClass); - let linkAttributes = links[i].attributes[0] - //console.log(linkAttributes); - if (linkAttributes === undefined) { - continue; - } - let linkValue = linkAttributes.value; - //console.log(linkValue); - if (linkClass.includes("-site col-4 button-to-count") - && !linkClass.includes("click-more-clickAttempted") - && linkValue.startsWith("/clicktogive/")) { - let link = links[i].href; - //console.log(link); - window.open(link, "_top"); - return; + // Vars + let i; + let progButtonsLeft = true; + do { + // On button site, click button. + let ctgButton = document.getElementById("ctg-click-box-button"); + if (ctgButton !== null) { + let millisecondsToClick = (Math.floor(Math.random() * MAX_RANDOM_TO_CLICK_SECONDS) + 1) * 1000; + await sleep(millisecondsToClick); + ctgButton.click(); } - } + let progButtons = []; + // Wait for buttons to load. + do { + await sleep(WAIT_SECONDS * 1000) + progButtonsLeft = true; + // On thanks site, choose new site if not all are already clicked. + progButtons = document.getElementsByClassName("ctg-click-grid-button"); + let foundButton = false; + for (i = 0; i < progButtons.length; i++) { + let progButtonClass = progButtons[i].className; + //console.log(progButtonClass); + let progButtonValue = progButtons[i].attributes[0].value; + //console.log(progButtonValue); + if (!progButtonClass.includes("click-attempted") // Button clicked already + && !progButtonValue.startsWith("http")) { // Is external site + progButtons[i].click(); + foundButton = true; + break; + } + } + if (foundButton) { + break; + } + progButtonsLeft = false; + } while (progButtons.length == 0) + } while (progButtonsLeft) // Wait for specified time, then reload page to click through again. let intervalMilliseconds = (INTERVAL_MINUTES + 1) * 60 * 1000;