使用“浏览器控制”“对标签页运行脚本”,脚本内容是否有字符数限制?

使用问题 · 1150 次浏览
Neal-HK 创建于 1天21小时前

我在使用浏览器控制模块中的对标签运行脚本时,发现如果js代码太大时,无法成功运行脚本。QuickerConnector 1.0.7会变成无法连接的状态,等超过浏览器控制模块中设置的超时时间后,扩展又恢复正常连接了。

我在js脚本中使用了插值符号$$,插入了一个词典变量,js本身的代码量并不算大,导致出现以上问题的可能是插入的词典变量的内容太大了。


回复内容
CL 1天11小时前
#1
Neal-HK 回复 CL 1天7小时前 :

好的,谢谢

Neal-HK 回复 CL 7小时55分钟前 :

大佬,Quicker有没有内置可以对json进行压缩的方法?压缩后再插值到脚本里面,能不能缓解上面的这个问题?

CL 回复 Neal-HK 6小时34分钟前 :
可以用c#进行gzip压缩,不过压缩完了还要转base64文本,感觉差别不大。 可以看看能不能先计算好结果以后,把结果传递给浏览器脚本?
Neal-HK 回复 CL 3小时49分钟前 :

我是对Temu后台运行这个脚本,这个json里面存的是一些1688的商品信息,脚本的主要功能是获取网页tbody下面每个tr对应的SKC(SKC可以理解为Temu的一个商品ID),然后从json里面获取出SKC对应的1688商品,然后在网页中插入一些样式,用来展示对应的1688商品。js代码中还有一些监听鼠标点击、tooltip等代码逻辑,js代码大概有900多行。主要还是这个json的内容大小不确定,有时候会比较大,大概是超过800KB左右就注入不了浏览器运行。这个json是从一个词典变量,通过“转义文本为合法json值”,然后再插入到js里面的。主要是我不知道转义之后这个json文本有没有换行符之类的,如果没有换行符,进行普通的压缩可能也没有太大的效果。

json格式如下:

{

    "SKC ID 1": [

        {

            "1688商品ID":"123456",

            "链接": "https://....html"

        },

        {

            "1688商品ID": "123456",

            "链接": "https://....html"

        }

    ],

    "SKC ID 2": [

        {

            "1688商品ID": "123456",

            "链接": "https://....html"

        },

        {

            "1688商品ID": "123456",

            "链接": "https://....html"

        }

    ]

}
一个商品信息里面,不只是有ID和链接2个字段,有20几个字段

Neal-HK 最后更新于 3小时46分钟前
Neal-HK 回复 CL 3小时41分钟前 :

有个思路是:分开使用2个“浏览器控制”模块,先注入这个json到浏览器作为全局变量,后面再注入一段js去访问这个变量?
但是我把这段js代码保存为一个txt文本,文件才几十KB,应该也没太大的作用

Neal-HK 回复 CL 3小时37分钟前 :

问了一下deepseek,如果使用gzip进行压缩的话,好像无法在js代码中直接使用JSON.parse()进行解析

涛涛涛 5小时26分钟前
#2

你的js代码有多少啊,运行不起来,可以给个动作或例子测试一下不?字典变量多大,举例说明一下,会不会是其他问题?

Neal-HK 回复 涛涛涛 3小时48分钟前 :

主要是需要插入到js里面的这个json太大了,有时候可能会有1M以上

Neal-HK 回复 涛涛涛 3小时12分钟前 :

js代码是让deepseek写的,也调试过可以成功运行,js代码逻辑应该是没问题的,尝试过很多次都是因为json太大而导致无法运行,json只要不超过800KB,都是可以正常运行的

涛涛涛 回复 Neal-HK 1小时43分钟前 :

我想到了两个思路,还没有测试,也没有那么大的数据,不知是否可以绕过这个限制大小
1.使用浏览器的cdp协议中的Runtime.evaluate(运行js代码)的命令注入js代码数据

var n={tabId: t};
chrome.debugger.attach(n, "1.3");
chrome.debugger.sendCommand(n, "Runtime.evaluate", {expression: h}); //h为js数据变量


2.增加
一个script标签元素,变相加载一个js文件的方式注入js代码,本地搭建一个服务器网址,使用这个模块 HTTP服务器 - Quicker 

  如:<script src="https://192-168-1-3.lan.quicker.cc:8080/11.js"></script>


const injectScript = (file, node) => {

  const th = document.querySelector(node);

  const s = document.createElement('script');

  s.setAttribute('type', 'text/javascript');

  s.setAttribute('src', file);

  th.appendChild(s);

};

injectScript('https://192-168-1-3.lan.quicker.cc:8080/11.js', 'body');


涛涛涛 最后更新于 55 分钟前
Neal-HK 回复 涛涛涛 3 分钟前 :

👍感谢分享,我有空尝试一下。不过我写的这个动作会分享给其它人使用,不知道使用这种方式会不会涉及到安全问题。

回复主贴