您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
计算总价
当前为
// ==UserScript== // @name checkReven // @namespace http://tampermonkey.net/ // @version 1.5 // @description 计算总价 // @author 你的名字 // @match https://www.ads.com/* // @grant none // ==/UserScript== (function() { 'use strict'; function waitForElement(selector, callback) { const observer = new MutationObserver((mutations, obs) => { const element = document.querySelector(selector); if (element) { obs.disconnect(); // 停止观察 callback(element); } }); // 开始观察整个文档 observer.observe(document, { childList: true, subtree: true }); } // 等待 chat-launcher-icon 加载完成 waitForElement('.chat-launcher-icon', () => { // 你的脚本逻辑 initScript(); }); // 创建日志窗口 const logContainer = document.createElement('div'); logContainer.style.position = 'fixed'; logContainer.style.left = '10px'; logContainer.style.bottom = '10px'; logContainer.style.width = '500px'; logContainer.style.maxHeight = '400px'; logContainer.style.overflowY = 'auto'; logContainer.style.background = 'rgba(0, 0, 0, 0.8)'; logContainer.style.color = 'white'; logContainer.style.padding = '10px'; logContainer.style.borderRadius = '8px'; logContainer.style.fontSize = '14px'; logContainer.style.zIndex = '9999'; logContainer.style.display = 'flex'; logContainer.style.flexDirection = 'column'; document.body.appendChild(logContainer); // 创建输入框 const inputField = document.createElement('input'); inputField.type = 'text'; inputField.placeholder = '输入 domain_name (用逗号分隔)'; inputField.style.width = '500px'; inputField.style.padding = '5px'; inputField.style.marginBottom = '5px'; inputField.style.border = '1px solid #ccc'; inputField.style.borderRadius = '4px'; inputField.style.color = 'white'; // 创建过滤按钮 const filterButton = document.createElement('button'); filterButton.innerText = '过滤'; filterButton.style.marginLeft = '5px'; filterButton.style.padding = '5px 10px'; filterButton.style.background = '#007bff'; filterButton.style.color = 'white'; filterButton.style.border = 'none'; filterButton.style.borderRadius = '4px'; filterButton.style.cursor = 'pointer'; // 创建清空按钮 const clearButton = document.createElement('button'); clearButton.innerText = '清空'; clearButton.style.marginLeft = '5px'; clearButton.style.padding = '5px 10px'; clearButton.style.background = '#dc3545'; clearButton.style.color = 'white'; clearButton.style.border = 'none'; clearButton.style.borderRadius = '4px'; clearButton.style.cursor = 'pointer'; // 将输入框和按钮添加到日志窗口 logContainer.appendChild(inputField); logContainer.appendChild(filterButton); logContainer.appendChild(clearButton); let filterDomains = []; let capturedData = []; // 用于存储捕获的请求数据 // 过滤按钮点击事件 filterButton.addEventListener('click', () => { const inputText = inputField.value.trim(); if (inputText) { filterDomains = inputText.split(',').map(domain => domain.trim()); logMessage(`<b>✅ 过滤列表更新:</b> ${JSON.stringify(filterDomains)}`); } // 过滤并展示数据 applyFilter(); }); // 清空按钮点击事件 clearButton.addEventListener('click', () => { // 清空日志窗口内容 logContainer.innerHTML = ''; // 重新添加输入框和按钮 logContainer.appendChild(inputField); logContainer.appendChild(filterButton); logContainer.appendChild(clearButton); logMessage(`<b>🧹 日志已清空</b>`); }); function logMessage(message) { const logItem = document.createElement('div'); logItem.innerHTML = message; logContainer.appendChild(logItem); logContainer.scrollTop = logContainer.scrollHeight; } // 监听 XMLHttpRequest 请求 const originalXhrOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (method, url, ...args) { this._requestUrl = url; return originalXhrOpen.apply(this, [method, url, ...args]); }; const originalXhrSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function (body) { this.addEventListener("load", function () { try { const responseData = JSON.parse(this.responseText); if (responseData.data && Array.isArray(responseData.data)) { // 存储捕获的数据 capturedData = responseData.data.map(({ domain_name, estimated_revenue }) => ({ domain_name, estimated_revenue: parseFloat(estimated_revenue) // 将 estimated_revenue 转换为数字 })); logMessage(`<b>📥 数据已捕获,等待过滤...</b>`); } else { logMessage(`<b>⚠️ 服务器返回的数据格式不匹配,未找到 'data' 数组。</b>`); } } catch (error) { logMessage(`<b>❌ JSON 解析失败:</b> ${error.message}`); } }); return originalXhrSend.apply(this, arguments); }; console.log("asdasd"); // 应用过滤并展示数据 function applyFilter() { if (capturedData.length === 0) { logMessage(`<b>⚠️ 没有捕获到数据,请先发起请求。</b>`); return; } let filteredData = capturedData; // 如果有过滤条件,就筛选数据 if (filterDomains.length > 0) { filteredData = capturedData.filter(item => filterDomains.includes(item.domain_name)); } // 计算总的反款金额 const totalRevenue = filteredData.reduce((sum, item) => sum + item.estimated_revenue, 0); // 展示总的反款金额 logMessage(`<b>📥 总反款:</b> ${totalRevenue.toFixed(2)}`); } })();