提取<script>标签之间的特定链接

时间:2019-02-22 00:29:25

标签: javascript html arrays google-chrome-extension

我想提取两个标签之间的特定链接(zip文件),如下所示:

  
 

我已经尝试过,但是不起作用:

  var链接= Array.from(document.querySelectorAll(“ script [AAA:'https://url/*.zip']”)); alert(links);
 

通常我使用querySelectorAll,并且可以与所有其他标记一起使用,但是不能在这里使用。所以我需要在这里提取 https:// url / * .zip链接,并在标准的alert()框中显示它,谢谢!

2 个答案:

答案 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”)