我想提取两个标签之间的特定链接(zip文件),如下所示:
我已经尝试过,但是不起作用:
var链接= Array.from(document.querySelectorAll(“ script [AAA:'https://url/*.zip']”)); alert(links);
通常我使用querySelectorAll,并且可以与所有其他标记一起使用,但是不能在这里使用。所以我需要在这里提取 https:// url / * .zip链接,并在标准的alert()框中显示它,谢谢!
答案 0 :(得分:0)
从脚本元素的文本中提取值,就像从字符串中提取值一样:
function extractor(names) {
const r = new RegExp(names.map(n => `\\b(${n}):\\s*'(.*?)'`).join('|'), 'g');
for (const script of document.getElementsByTagName('script')) {
const text = script.textContent;
let match = r.exec(text);
if (match) {
const vars = {};
do {
const [/*source*/, name, value] = match;
vars[name] = value;
match = r.exec(text);
} while (match);
return vars;
}
}
}
在扩展弹出窗口中使用以从网页中提取内容时,我们需要一个帮助程序功能,该功能将代码作为内容脚本运行:
function extractPageScriptVars(names) {
return new Promise(resolve => {
chrome.tabs.executeScript({
code: '(() => (' + extractor + ')(' + JSON.stringify(names) + '))()',
}, ([vars]) => resolve(vars));
});
}
用法:
(async () => {
const vars = await extractPageScriptVars(['AAA', 'BBB']);
alert(JSON.stringify(vars, null, ' '));
})();
如果脚本包含有效的JSON / JS对象,则可以找到其开始/结束索引并提取整个声明字符串,然后使用JSON.parse对其进行解析,从而生成一个对象/数组,可以直接使用。 / p>
答案 1 :(得分:-1)
您识别脚本的方式是错误的。只需省略[],就可以解析列表以找到正确的脚本标记。或者只是给脚本标签一个ID并使用querySelector(“#scriptID”)