您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically handle trades across all Scrap.tf pages and Steam trade offers dynamically, without manual delays.
// ==UserScript== // @name ✅ Scrap.tf Full Auto-Accept Trade // @namespace http://tampermonkey.net/ // @version 1.50 // @description Automatically handle trades across all Scrap.tf pages and Steam trade offers dynamically, without manual delays. // @author Ajinkya Rane // @match https://scrap.tf/* // @match https://steamcommunity.com/tradeoffer/* // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; // Utility function to wait for an element to be visible and trigger a callback function waitForVisibleElement(selector, callback, interval = 500) { const checkExist = setInterval(() => { const element = document.querySelector(selector); if (element && element.offsetParent !== null) { console.log(`[DEBUG] Element "${selector}" is visible.`); clearInterval(checkExist); callback(element); } else { console.log(`[DEBUG] Waiting for element "${selector}" to become visible...`); } }, interval); } // Function to directly trigger click events function performClick(element) { if (element) { try { console.log(`[DEBUG] Clicking on element:`, element); element.click(); // Use the native click method } catch (error) { console.error(`[ERROR] Failed to click on element: ${error}`); } } else { console.error(`[ERROR] Element not found.`); } } // Function to continuously attempt confirmation and acceptance function attemptConfirmationAndAcceptance() { console.log(`[DEBUG] Starting confirmation and acceptance process.`); const confirmSelector = '#you_notready'; // "Confirm Trade Contents" button const acceptSelector = '#trade_confirmbtn'; // "Accept Trade" button const modalSelector = '.newmodal .title_text'; // Modal with "Additional confirmation needed" const repeatAction = setInterval(() => { const modal = document.querySelector(modalSelector); if (modal && modal.textContent.includes("Additional confirmation needed")) { console.log(`[DEBUG] "Additional confirmation needed" modal detected. Closing popup.`); clearInterval(repeatAction); // Close the popup (if running in a child window) if (window.opener) { console.log(`[DEBUG] This is a popup window. Closing it now.`); window.close(); } else { console.log(`[DEBUG] Not a popup. Redirecting to a blank page.`); window.location.href = "about:blank"; // Redirect as a fallback } return; } const confirmButton = document.querySelector(confirmSelector); if (confirmButton && confirmButton.offsetParent !== null) { console.log(`[DEBUG] "Confirm Trade Contents" button is visible. Clicking it.`); performClick(confirmButton); } const acceptButton = document.querySelector(acceptSelector); if (acceptButton && acceptButton.offsetParent !== null) { console.log(`[DEBUG] "Accept Trade" button is visible. Clicking it.`); performClick(acceptButton); } }, 500); // Retry every 500ms for dynamic updates } // Function to handle the "Open Trade Offer" button function handleOpenTradeOfferButton() { waitForVisibleElement('.mm-queue-trade-confirmed', (button) => { console.log(`[DEBUG] 'Open Trade Offer' button is visible. Clicking it.`); performClick(button); // Immediately start handling the confirmation process console.log(`[DEBUG] Handling the confirmation process after clicking 'Open Trade Offer'.`); attemptConfirmationAndAcceptance(); }); } // Detects any dynamic changes in trade item boxes and ensures they are fully loaded function ensureTradeItemsLoaded(callback) { const tradeItemContainer = document.querySelector('.trade_item_box'); if (tradeItemContainer && tradeItemContainer.children.length > 0) { console.log(`[DEBUG] Trade items fully loaded.`); callback(); } else { console.log(`[DEBUG] Waiting for trade items to load...`); setTimeout(() => ensureTradeItemsLoaded(callback), 500); // Retry every 500ms } } // Main logic for handling different pages if (window.location.href.includes("https://scrap.tf/")) { console.log(`[DEBUG] On Scrap.tf page.`); handleOpenTradeOfferButton(); // Handle Scrap.tf open trade offers } else if (window.location.href.includes("https://steamcommunity.com/tradeoffer/")) { console.log(`[DEBUG] On Steam trade offer page.`); ensureTradeItemsLoaded(() => { attemptConfirmationAndAcceptance(); // Start handling trade confirmation and acceptance }); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址