脚本体验师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