首页 > 解决方案 > 如何从html中获取具有值的脚本标签

问题描述

我正在使用 nodejs 开发 lambda 函数。在其中我点击了一个返回 http 响应的 http url。这个响应包含很少的脚本标签,我想得到它。

const https = require('https')

// const json = require('json')
let url = "https://test.com"   

exports.handler = async function(event) {
  const promise = new Promise(function(resolve, reject) {
    https.get(url, (res) => {
        resolve(res.statusCode)
        console.log('HEADERS: ' + JSON.stringify(res.headers));
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
          console.log('###############################################');
          console.log('BODY: ' + chunk);
        });
        
      }).on('error', (e) => {
        reject(Error(e))
      })
    })
  return promise

}

它返回类似下面的代码。

<meta property="fb:pages" content="400601983320296">
<link href="https:/test,minify-1.cms" type="text/css" rel="stylesheet">

    <script type="text/javascript">
        var isAdaptive = '1', isPremium = '';
    </script>
    
    <script>
        var arrArticleList = [1,2,3,4,5,6,7,8,9,10];
        
        var arrPromoList = [];
    </script>
                

我想在不使用任何 npm 模块的情况下从响应中提取此脚本标记。因为我直接在 lambda 控制台上开发代码。

谢谢

标签: node.jsaws-lambda

解决方案


这是我的实现(您也可以使用 Regex 代替这种方法):

const https = require('https')
let url = "https://test.com"   

async function t() {
  const promise = new Promise(function(resolve, reject) {
    https.get(url, (res) => {
        resolve(res.statusCode)
        console.log('HEADERS: ' + JSON.stringify(res.headers));
        res.setEncoding('utf8');
        res.on('data', function (chunk) {
          console.log('###############################################');

          // get scripts
          let s = chunk
          const scripts = [];
          while (s.indexOf("<script") != -1 && s.indexOf("</script>") != -1) {
            let f = s.indexOf("<script");
            let l = s.indexOf("</script>")+9;
            scripts.push(s.slice(f, l))
            s = s.slice(l)
          }
          console.log(scripts)
          //

        });
        
      }).on('error', (e) => {
        reject(Error(e))
      })
    })
  return promise
}

推荐阅读