您需要先安装一个扩展,例如 篡改猴、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 });
- })();