Извлечь конкретную ссылку между < script > теги

Обратите внимание, что с это commit в июне 2015 года (Jackson 2.6.2 и выше) теперь вы можете просто написать:

public enum Event {
    @JsonProperty("forgot password")
    FORGOT_PASSWORD;
}

0
задан Starks 24 February 2019 в 04:54
поделиться

1 ответ

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

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
ответ дан wOxxOm 24 February 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: