Извлечь конкретную ссылку между тегами <script> - PullRequest
0 голосов
/ 22 февраля 2019

Я хотел бы извлечь конкретную ссылку (zip-файл) между двумя тегами, как показано ниже:

    <script>

    AAA:'https://url/*.zip'
    BBB:'https://url/*.avi'
    CCC:'https://url/*.mp4'

    </script>

Я пытался с этим, но это не работает:

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

Обычно я использую querySelectorAll, и это работает со всеми другими тегами, но не здесь .. Так что мне нужно здесь, чтобы извлечь https://url/*.zip ссылку и показать ее в стандартном окне alert (), Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Извлечение значений из текста элемента скрипта, как если бы вы делали это из строки:

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, вы можете найти его начальный / конечный индексы и извлечь всю декларациюstring, затем проанализируйте его с помощью JSON.parse, который создает объект / массив, который вы можете использовать напрямую.

0 голосов
/ 22 февраля 2019

То, как вы идентифицируете скрипт, неверно.Просто пропустите [], и вы сможете проанализировать свой список, чтобы найти правильный скрипт-тег.Или просто присвойте тегу script идентификатор и используйте querySelector ("# scriptID")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...