脚本体验师001 发表于 2023-1-2 13:51:41

Major 发表于 2023-1-1 23:56
兄弟,你研究好了吗,能否共享你的完整代码我套用一下

别老想着套用兄弟,情况远比想象的复杂,也是没找到能在所有网站通用的方案

特别一些大型网站,他们自己都在互相这样玩,弄得页面卡卡的风扇都转圈了。这玩意一个不慎就会影响网络通畅。

用过 https://github.com/wendux/Ajax-hook 库,也是问题多多,经常弄得页面白屏了也不知道因为啥

还是等C老师看能不能解决这些眼面前的难题,毕竟最强大脑担当

Major 发表于 2023-1-2 20:28:45

cxxjackie 发表于 2023-1-1 22:45
不行的,这个只是因为请求的快慢不一,AB的完成时间应该差不多,多次刷新导致B比A先完成了,所以B能改变A ...

有没有可能劫持post,包括请求url,请求headers,还有cookies,data等全部信息。然后将这些信息发送到自己的服务器。在自己服务器模拟请求,并修改数据后,将修改的数据再返回来,传递到页面。但是具体怎么实现不太会弄,有没有这种可能

cxxjackie 发表于 2023-1-2 21:03:54

Major 发表于 2023-1-2 20:28
有没有可能劫持post,包括请求url,请求headers,还有cookies,data等全部信息。然后将这些信息发送到自 ...

是可以的,这就是异步修改响应数据,你先试试我那段代码可不可行,按你的需求就是缺少headers、data等信息,这部分代码在库里面可以找到。我再看看吧,这个要加进库里的话,得做很多改动。

Major 发表于 2023-1-2 23:31:24

本帖最后由 Major 于 2023-1-3 00:15 编辑

cxxjackie 发表于 2023-1-2 21:03
是可以的,这就是异步修改响应数据,你先试试我那段代码可不可行,按你的需求就是缺少headers、data等信 ...
截获原网站post 并修改 request.url 指向(修改请求地址,到自己的服务器,在自己的服务器模拟请求),遇到跨域问题

Access to XMLHttpRequest at 'http://127.0.0.1:16999/ylyf/api/post' from origin '原来网站,脚本工作的站点' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.


同时cookie 好像也还没用。这样个人服务器即便接收到转发,好像也没法模拟请求
    hookJson3:function(){
      ajaxHooker.hook(request => {
            if (request.url === '/api/show' && request.method === 'POST'){
                console.log('test:',request);
                console.log('test_url:',request.url);
                console.log('test_headers',request.headers);
                console.log('test_data',request.data);
                console.log('test_cookies',request.cookies);
                request.url = 'http://127.0.0.1:5000/ylyf/api/post'
                console.log('test:',request.url);
            }

      });
    },




cxxjackie 发表于 2023-1-3 12:37:54

Major 发表于 2023-1-2 23:31
截获原网站post 并修改 request.url 指向(修改请求地址,到自己的服务器,在自己的服务器模拟请求),遇 ...

跨域可以在你服务器那边加CORS规则解决,不过cookie确实不行,浏览器限制。
异步特性将在下个版本加入ajaxHooker库,我正在写,以后可以用GM_xhr跨域转发。

Major 发表于 2023-1-3 13:24:26

cxxjackie 发表于 2023-1-3 12:37
跨域可以在你服务器那边加CORS规则解决,不过cookie确实不行,浏览器限制。
异步特性将在下个版本加入aja ...

太好了!太好了!,等你更新!!!!

Major 发表于 2023-1-3 16:39:59

本帖最后由 Major 于 2023-1-3 16:55 编辑

遇到一个问题,寻求帮助。以下代码我用了两种不同的 hook方式。在 【// @match      https://fxg.jinritemai.com/ffa/mexpress/goods/storage】 这个网址,两种方式都生效。但是奇怪的是,在 【// @match      https://base.work.cainiao.com/ma ... hInventoryQuery.htm*】两种方式都不生效,也就是 a.hookJson_tm_bms_xiaoqi();   这个函数内的hook 没执行


我看到了这个说明(但是不太会用)见下图2,如果有个完整示例,让这段代码执行就更好了:


// ==UserScript==
// @name         简称显示
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.1.0
// @descriptiontry to take over the world!
// @author       You
// @match      https://fxg.jinritemai.com/ffa/mexpress/goods/storage
// @match      https://base.work.cainiao.com/manage/batch/batchInventoryQuery.htm*
// @require      https://scriptcat.org/lib/637/1.0.0/ajaxHooker.js
// @run-at       document-start
// ==/UserScript==

// 店铺库存简称显示
let b = {
    // 根据条形码匹配商品简称
    code:{
      "4004148057274":"01德大铁",
      "4004148323218":"02红铁片",
      "4004148047503":"03中大铁",
      "4004148313547":"04绿大铁",
      "4004148323768":"05绿铁片",
      "4004148017537":"06钙镁锌",
      "4004148057267":"08德小铁",
      "4004148324741":"09德版艾儿",
      "4004148322327":"10儿童铁元",
      "4004148323232":"11维B族",
      "4004148017223":"14德版多维",
      "4004148307058":"17护肝液",
      "4004148019821":"20黑莓鱼油",
      "4004148017018":"23肠道卫士",
      "4004148018916":"24钙片",
      "4004148330599":"27软骨胶囊",
      "4004148018121":"28润嗓糖",
      "4004148345975":"褪黑素30片",
      "4004148307478":"维B胶囊",   
      "4004148349775":"05绿铁片(新)",   
    },

    // 铁元店 菜鸟货品ID 匹配商品名称
    itemId : {
      "637854584084":"01德大铁",
      "638881163050":"02红铁片",
      "638924845292":"03中大铁",
      "638558160498":"04绿大铁",
      "639596995875":"05绿铁片",
      "638563752479":"07中小铁",
      "638557156350":"08德小铁",
      "639267098498":"10儿童铁元",
      "639261274711":"12绿小铁",
      "639714222006":"40女士调经茶",
      "641688011698":"50德超大铁",
      "643491679413":"51迷你15ml儿铁",
      "652636028202":"紫锥菊唇膏",
    },
};

let a = {

    // 抖音供应链管理(hook 方式1)
    hookJson_dy_gylgl:function(){
      const xhrOpen = XMLHttpRequest.prototype.open;
      XMLHttpRequest.prototype.open = function() {
            // let url = '/shopuser/cb/wareStock/wareList'
            let urlfined = /\/shopuser\/cb\/wareStock\/wareList/;
            let response = 'responseText'
            const xhr = this;
            if (arguments.match(urlfined)) {
                const getter = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, response).get;
                Object.defineProperty(xhr, response, {
                  get: () => {
                        let result = getter.call(xhr);
                        console.log("结果类型是:",typeof(result))
                        let resultDic = JSON.parse(result);
                        let goodsitem = resultDic.data.list
                        goodsitem.forEach((element,index) => {
                            let barCode = element.wareInfo.barCode
                            if(b.code){
                              goodsitem.wareInfo.wareName = b.code + '\n'
                            };
                        });
                        //这里可以修改result
                        return resultDic;
                  }
                });
            }
            return xhrOpen.apply(xhr, arguments);
      };
    },
    // 天猫国际BMS效期查询(hook 方式2)
    hookJson_tm_bms_xiaoqi:function(){
      console.log("天猫国际BMS效期查询1")
      ajaxHooker.protect();// 这一句,加 和 没加 hook 都没执行
      ajaxHooker.hook(request => {
            console.log("URLGET:",request.url)
            if (request.url.match(/\/batch\/batchInventoryQueryJson.do/)){
                console.log('test:',request);
                console.log('test_URL:',request.url);
            };
      });
    },

};


let c = {
    inmain:function(){
      if(document.location.pathname.match(/\/ffa\/mexpress\/goods\/storage/)){
            a.hookJson_dy_gylgl();
      }else if(document.location.pathname.match(/\/batch\/batchInventoryQuery.htm/)){
            a.hookJson_tm_bms_xiaoqi();
      };
    },
};

(function() {
    c.inmain();
})();




cxxjackie 发表于 2023-1-3 20:29:09

Major 发表于 2023-1-3 16:39
遇到一个问题,寻求帮助。以下代码我用了两种不同的 hook方式。在 【// @match      https://fxg.jinrite ...

我打不开第二个链接,会被重定向到商家入驻的页面,估计是你自己的账号已入驻,才能进入的管理页面。不生效我能想到两个原因:一个是你引用的库版本太旧了,1.0.0的是有一些冲突问题,换最新版本试试;另一个是请求来自iframe,在控制台抓包那里点右上角齿轮,勾选“按框架分组”再看看,是iframe问题的话修改match地址即可。如果是未知的冲突问题则比较麻烦,毕竟我进不去也没法调试。
protect方法尽量放在代码最开始的时候执行,晚了就没效果了。

Major 发表于 2023-1-3 21:34:37

本帖最后由 Major 于 2023-1-3 21:43 编辑

cxxjackie 发表于 2023-1-3 20:29
我打不开第二个链接,会被重定向到商家入驻的页面,估计是你自己的账号已入驻,才能进入的管理页面。不生 ...
太厉害了!!!!,一下就定位到问题,果然是 iframe 问题。经验丰富啊大神,膜拜一会!!!!,厉害!!!!厉害!!!!(之前好像脚本猫会自动把 iframe 中也插入脚本,这次好像没自动加进来)。

cxxjackie 发表于 2023-1-4 00:05:32

Major 发表于 2023-1-3 21:34
太厉害了!!!!,一下就定位到问题,果然是 iframe 问题。经验丰富啊大神,膜拜一会!!!!,厉害!! ...

1.2.0已发布,你试试看吧,没做太多测试,可能有bug。
页: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14
查看完整版本: ajax劫持库ajaxHooker