首页 > 其他分享 >使用 Tampermonkey 在页面加载完5秒后监听特定页面元素的点击事件并修改 API 返回的数据

使用 Tampermonkey 在页面加载完5秒后监听特定页面元素的点击事件并修改 API 返回的数据

时间:2024-07-04 19:32:42浏览次数:16  
标签:oneid data pub replace API nodes Tampermonkey response 页面

示例

 

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      2024-07-04
// @description  try to take over the world!
// @author       You
// @match        https://a.x.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=zhonganonline.com
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
     console.log('Tampermonkey 脚本已启动');
    // Your code here...
     // 拦截 XMLHttpRequest
    (function(open) {
        console.log('XMLHttpRequest 0');
        XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
            //console.log('XMLHttpRequest 1');
            this.addEventListener("readystatechange", function() {
                //console.log('XMLHttpRequest 2');
                //console.log('XMLHttpRequest 3',this.readyState,'---',this.status);
                if (this.readyState === 4 && this.status === 200) {
                    // 仅拦截特定的 API 请求,例如 https://api-endpoint.com/data
                    console.log('XMLHttpRequest 4---------------------------',url);
                    if (url.includes('/ide/api/lineage/taskLineage')) {
                        console.log('原始响应数据:', this.responseText);

                        // 解析返回的 JSON 数据
                        let response = JSON.parse(this.responseText);
                        //let data = response;
                        // 修改数据
                        //response.success = 'modifiedValue1';
                         //var result = replaceStringInObject(data, 'pub_cdm_oneid_v2_', '');
                        console.log('response------:', response.data[0].nodes[1].msg.docName);
                        // 手动替换 JSON 数据中的特定字段值
                        response.data[0].nodes[0].msg.docName = response.data[0].nodes[0].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[1].msg.docName = response.data[0].nodes[1].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[2].msg.docName = response.data[0].nodes[2].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[3].msg.docName = response.data[0].nodes[3].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[4].msg.docName = response.data[0].nodes[4].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[5].msg.docName = response.data[0].nodes[5].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[6].msg.docName = response.data[0].nodes[6].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[7].msg.docName = response.data[0].nodes[7].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[8].msg.docName = response.data[0].nodes[8].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[9].msg.docName = response.data[0].nodes[9].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[10].msg.docName = response.data[0].nodes[10].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');
                        response.data[0].nodes[11].msg.docName = response.data[0].nodes[11].msg.docName.replace('pub_edw_', '').replace('pub_adm_', '').replace('oneid_v2_', '').replace('oneid_', '').replace('pub_cdm_', '').replace('adm_', '');

                        // 创建新的响应文本
                        Object.defineProperty(this, 'responseText', { value: JSON.stringify(response) });
                        //Object.defineProperty(this, 'responseText', { value: JSON.stringify(result) });
                        console.log('修改后的响应数据:', this.responseText);
                    }
                }
            }, false);

            open.call(this, method, url, async, user, pass);
        };
    })(XMLHttpRequest.prototype.open);

    // 监听特定页面元素的点击事件
    function addEventListeners() {
        // 假设按钮的 ID 是 'targetButton'
        var button = document.querySelector("#task-table > div > div > div > div > div.ant-table-fixed-right > div.ant-table-body-outer > div > table > tbody > tr > td > div > a:nth-child(6)");

        if (button) {
            button.addEventListener('click', function() {
                console.log('按钮被点击,准备修改 API 返回的数据');

                // 这里可以添加代码来进一步修改 API 返回的数据,例如重新发送请求等

            });
        } else {
            console.error('找不到指定的按钮');
        }
    }

    // 确保页面加载完毕后添加事件监听器
    window.addEventListener('load', function() {
        setTimeout(function() {
            addEventListeners();
        }, 5000); // 5000 毫秒 = 5 秒
    });



})();

 

标签:oneid,data,pub,replace,API,nodes,Tampermonkey,response,页面
From: https://www.cnblogs.com/ministep/p/18284503

相关文章

  • net6 WebAPI大文件上传
    最近由于客户需要上传大文件,所以研究了一下文件上传的问题net6上传文件分为两种情况:buffering和streaming(缓存和流)Buffering:我们平时采用的通过IFormFile上传文件的方式就是Buffering,此方式会将文件全部缓存起来。这种方式简单,但对内存和硬盘空间造成负担。关于缓存,这里有个误......
  • C#常用 API函数大全
    1.API之网络函数WNetAddConnection创建同一个网络资源的永久性连接WNetAddConnection2创建同一个网络资源的连接WNetAddConnection3创建同一个网络资源的连接WNetCancelConnection结束一个网络连接WNetCancelConnection2结束一个网络连接WNetCloseEnum结束一次枚举操作WN......
  • 【web APIs】快速上手Day03(Dom事件进阶)
    目录WebAPIs-第3天全选文本框案例事件流事件捕获事件冒泡阻止冒泡解绑事件on事件方式解绑addEventListener方式解绑注意事项-鼠标经过事件的区别两种注册事件的区别事件委托综合案例-tab栏切换改造其他事件页面加载事件元素滚动事件页面滚动事件-获取位置页面滚动......
  • Selenium+ChromeDriver获取页面数据
    一个业务需求是从一个网站上抓取客户的评论信息,评论数据已经渲染好在html上由接口返回的,只能从HTML上一个个扣数据。一开始是使用的HtmlUnit来处理,但期间一直抛出拒绝访问提示但是从浏览器可以直接访问,我就换别的网站进行访问,别的网站能够正常抓取数据,期间也试过设置请求头,直到在......
  • 短网址缩短API接口
    这边记录下wai.cn短网址的api机制,wai.cn比较好记录。请求接口地址:https://api.wai.cn/v1/api/chains.list请求方法:POST请求示例:https://api.wai.cn/v1/api/chains.list?access_token=xxxxxxx请求参数说明参数名类型是否必传描述access_tokenstring是身份令......
  • 一图看懂华为云 CodeArts API 7 大特性,带你玩转一站式 API
    everythingisAPI,预计未来将有80%以上的商业合作会通过API来完成。华为云CodeArtsAPI是API全生命周期一体化协作平台,支持开发者高效实现API设计、API开发、API测试、API托管、API运维、API变现的一站式体验。以API契约为锚点,CodeArtsAPI保证了API各阶段数据高度一致,为开发......
  • Fastapi 脚本接口规范优化
    Fastapi脚本接口规范优化在编写Fastapi脚本提供自动化接口操作时,我们不仅要实现接口功能实用性,也要考虑接口的规范管理,这边以Fastapi官方文档作为一个切入点。官方接口文档默认官方接口文档如下图所示,宛如大杂烩一样/doc接口文档 /redoc接口文档 优化方案1、根据功能......
  • Jetpack Compose 页面路由功能
    JetpackCompose页面路由功能JetpackCompose通过其Navigation库提供了对页面(或称为屏幕)之间导航的支持。这个库是基于Jetpack库中的Navigation组件专门针对Compose进行的扩展,使得在使用Compose构建应用时,能够以声明式的方式处理应用内的导航逻辑。JetpackComposeNavigation......
  • 混合开发H5页面的数字字体在IOS 安卓上显示不一样
    背景做完H5页面,UI走查的时候,发现IOS下数字的字体不对,安卓下是正常的,于是就查了下原因,以此做个记录看下实际效果左边是安卓,右边是IOS的效果,明显看出来数字的字体是不一样的安卓、IOS字体不一致的原因在安卓、IOS系统中,如果没有专门设置字体的话,会使用默认的字体,汉字,英文......
  • 不同系统间数据交换要通过 api 不能直接数据库访问
    很多大数据开发提供数据给外部系统直接给表结构,这是不好的方式。在不同系统间进行数据交换时,通过API(应用程序编程接口)而非直接访问数据库是现代系统集成的一种最佳实践。目录为什么要通过API进行数据交换如何通过API进行数据交换实现步骤使用Flask构建RESTfulAPI安装F......