上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
12下一页
返回列表 发新帖

油猴脚本执行时机求助

[复制链接]

该用户从未签到

1

主题

5

回帖

8

积分

助理工程师

积分
8
发表于 2024-11-19 09:59:51 | 显示全部楼层 | 阅读模式
悬赏5油猫币已解决

我需要截取某页面一开始加载中的一个网络请求中的数据,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); }; }

最佳答案

查看完整内容

document.querySelector('#__nuxt').__vue__.context.store.state.token 感觉哥哥路有点走歪了 这个是nuxt+vue2页面 数据打波堆栈发现在全局状态树 直接拿nuxt的context对象夺树的数据就可以了 start自身不保证注入时间,只保证提前注入 如果特别拼速度的时候确实可能出现这种情况
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    713

    主题

    6007

    回帖

    6792

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6792

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2024-11-19 09:59:52 | 显示全部楼层
    小耳朵图图 发表于 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自身不保证注入时间,只保证提前注入
    如果特别拼速度的时候确实可能出现这种情况

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    回帖

    8

    积分

    助理工程师

    积分
    8
    发表于 2024-11-19 10:00:07 | 显示全部楼层
    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);
        };
    }
    回复

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 52 天

    [LV.5]常住居民I

    5

    主题

    25

    回帖

    63

    积分

    初级工程师

    积分
    63

    油中3周年挑战者 lv2油中2周年

    发表于 2024-11-19 10:31:35 | 显示全部楼层
    看看返回data是不是变了,导致if语句失效,或者请求方式变了这只是xhr拦截
    回复

    使用道具 举报

  • TA的每日心情

    2024-6-12 17:04
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    4

    主题

    28

    回帖

    62

    积分

    初级工程师

    积分
    62

    油中3周年油中2周年新人报道挑战者 lv2

    发表于 2024-11-19 10:48:43 | 显示全部楼层

    如果用的是TamperMonkey的话,修改设置里的Content Script API设置为Dynamic看看

    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    回帖

    8

    积分

    助理工程师

    积分
    8
    发表于 2024-11-19 10:57:09 | 显示全部楼层
    krystal 发表于 2024-11-19 10:31
    看看返回data是不是变了,导致if语句失效,或者请求方式变了这只是xhr拦截

    没有变化,通过对F12控制台的观察,发现我脚本运行时机很不稳定,绝大多次数都在页面运行之后才执行,导致截取不到网络请求数据。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    回帖

    8

    积分

    助理工程师

    积分
    8
    发表于 2024-11-19 11:08:40 | 显示全部楼层
    whitesev 发表于 2024-11-19 10:48
    [md]如果用的是TamperMonkey的话,修改设置里的`Content Script API`设置为`Dynamic`看看[/md] ...

    改完后,页面也进不去了
    回复

    使用道具 举报

  • TA的每日心情

    2024-6-12 17:04
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    4

    主题

    28

    回帖

    62

    积分

    初级工程师

    积分
    62

    油中3周年油中2周年新人报道挑战者 lv2

    发表于 2024-11-19 12:14:26 | 显示全部楼层
    小耳朵图图 发表于 2024-11-19 11:08
    改完后,页面也进不去了

    页面?改这个只会影响脚本的吧
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    713

    主题

    6007

    回帖

    6792

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6792

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2024-11-19 13:09:14 | 显示全部楼层
    最好还是实现一个测例丢个地址让大家看一下
    一般来说网页的执行时机,管理器的执行时机,脚本的执行时机都可能影响
    没测例很难判断的
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    5

    回帖

    8

    积分

    助理工程师

    积分
    8
    发表于 2024-11-20 09:23:22 | 显示全部楼层
    李恒道 发表于 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存储的,所以有时候没有获取到,但还是可以使用功能。
    我的想法是脚本与页面争夺最先执行时机没争夺到。所以有时候获取不到
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表