您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically add chase offers
// ==UserScript== // @name Chase offers // @namespace http://tampermonkey.net/ // @version 2024-11-24 // @description Automatically add chase offers // @author You // @match https://secure.chase.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=chase.com // @grant none // ==/UserScript== // copied with minor adaptation from https://www.reddit.com/r/ChaseSapphire/comments/18pb8w5/auto_add_all_offers_to_chase_card/ (function() { 'use strict'; const urlPattern = /https:\/\/secure\.chase\.com\/web\/auth\/dashboard#\/dashboard\/merchantOffers\/offer-hub\?accountId=.*/; const btnSelection = '[role="button"][tabindex="0"] > :nth-child(2)'; //'.r9jbij9' manual button selection const backFunction = () => { // shadow root back button click document.querySelectorAll(`[variant="back"]`)[0].shadowRoot.querySelectorAll(`#back-button`)[0].click() .click(); // old back method // window.history.back(); }; const aa = () => { backFunction(); setTimeout(checkUrlAndRun, Math.random() * 1000 + 300); }; let count = 1; const c = () => { try { const btns = [...document.querySelectorAll(btnSelection)] .filter(b => b.childNodes[1].childNodes[0].type !== 'ico_checkmark_filled'); const b = btns.pop(); if (!b) { console.log('added all!'); return; } b.childNodes[0].click(); updateProgress(count, btns.length); setTimeout(aa, Math.random() * 1000 + 300); document.querySelector(btnSelection).click(); } catch (e) { checkUrlAndRun(); } }; const updateProgress = (current, total) => { console.log(`Remaining: ${total}`); count++; }; const waitForElements = () => { const observer = new MutationObserver((mutations, observer) => { if (document.querySelectorAll(btnSelection).length > 0) { observer.disconnect(); c(); } }); observer.observe(document.body, { childList: true, subtree: true }); }; const checkUrlAndRun = () => { if (urlPattern.test(window.location.href)) { waitForElements(); } }; // Initial check checkUrlAndRun(); // Monitor URL changes let oldHref = document.location.href; const body = document.querySelector("body"); const observer = new MutationObserver(mutations => { if (oldHref !== document.location.href) { oldHref = document.location.href; checkUrlAndRun(); } }); observer.observe(body, { childList: true, subtree: true }); })();