油猴脚本执行时机求助
我需要截取某页面一开始加载中的一个网络请求中的数据,run-at也设置的document-start,实际运行中,大多数时间网页在我脚本运行之前,导致无法获取网络请求中的数据。以前是可以正常获取的,但是近几期油猴更新后就不能正常用了,求助😭😭😭overrideOpen()是几乎放在代码最前列的。
`
function overrideOpen() {
var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url) {
var self = this;
// 添加事件监听器,监听 XMLHttpRequest 的响应阶段
this.addEventListener('load', function () {
if (self.readyState === 4 && self.status === 200) {
var data = self.responseText;
var isPracticeData = data.includes('testPaperTopics');
if (isPracticeData) {
practiceData = practiceData || [];
if (!Array.isArray(practiceData)) {
practiceData = [];
}
practiceData.push(JSON.parse(data));
handlePracticeData(practiceData);
}
}
});
// 调用原始的 open 方法
open.apply(this, arguments);
};
}
` 小耳朵图图 发表于 2024-11-20 09:23
大佬,涉及到公司页面,但私聊不了你。
****
脚本下载:https://greasyfork.org/zh-CN/scripts/483543-%E9 ...
document.querySelector('#__nuxt').__vue__.context.store.state.token
感觉哥哥路有点走歪了
这个是nuxt+vue2页面
数据打波堆栈发现在全局状态树
直接拿nuxt的context对象夺树的数据就可以了
start自身不保证注入时间,只保证提前注入
如果特别拼速度的时候确实可能出现这种情况
function overrideOpen() {
var open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url) {
var self = this;
// 添加事件监听器,监听 XMLHttpRequest 的响应阶段
this.addEventListener('load', function () {
if (self.readyState === 4 && self.status === 200) {
var data = self.responseText;
var isPracticeData = data.includes('testPaperTopics');
if (isPracticeData) {
practiceData = practiceData || [];
if (!Array.isArray(practiceData)) {
practiceData = [];
}
practiceData.push(JSON.parse(data));
handlePracticeData(practiceData);
}
}
});
// 调用原始的 open 方法
open.apply(this, arguments);
};
} 看看返回data是不是变了,导致if语句失效,或者请求方式变了这只是xhr拦截 如果用的是TamperMonkey的话,修改设置里的`Content Script API`设置为`Dynamic`看看 krystal 发表于 2024-11-19 10:31
看看返回data是不是变了,导致if语句失效,或者请求方式变了这只是xhr拦截
没有变化,通过对F12控制台的观察,发现我脚本运行时机很不稳定,绝大多次数都在页面运行之后才执行,导致截取不到网络请求数据。 whitesev 发表于 2024-11-19 10:48
如果用的是TamperMonkey的话,修改设置里的`Content Script API`设置为`Dynamic`看看 ...
改完后,页面也进不去了 小耳朵图图 发表于 2024-11-19 11:08
改完后,页面也进不去了
页面?改这个只会影响脚本的吧 最好还是实现一个测例丢个地址让大家看一下
一般来说网页的执行时机,管理器的执行时机,脚本的执行时机都可能影响
没测例很难判断的 李恒道 发表于 2024-11-19 13:09
最好还是实现一个测例丢个地址让大家看一下
一般来说网页的执行时机,管理器的执行时机,脚本的执行时机都 ...
大佬,涉及到公司页面,但私聊不了你。
****
脚本下载:https://greasyfork.org/zh-CN/scripts/483543-%E9%81%87%E8%A7%81%E5%85%AB%E4%B8%89%E7%9A%84%E5%BF%83%E5%8A%A8%E7%9E%AC%E9%97%B4
流程:登录后,最右下角“业务系统”第一页第二个“学企来”。进去时页面会返回一个Bearer的Authorization,脚本需要截取这个数据,然后点击脚本“千回百转”功能,点击“每日一练”即完成所需功能。
因为Authorization是用GM_setValue存储的,所以有时候没有获取到,但还是可以使用功能。
我的想法是脚本与页面争夺最先执行时机没争夺到。所以有时候获取不到
页:
[1]
2