【问题标题】:Postman: Extract data from javascript and HTML response into a JSON objectPostman:从 javascript 和 HTML 响应中提取数据到 JSON 对象中
【发布时间】:2021-03-26 19:33:17
【问题描述】:

我正在使用 Postman 和 Cheerio 从 HTML 响应中抓取数据。在下面的示例中,我试图将DDC.dataLayer['b'](位于<script> 标签中)中的数据提取到 JSON 对象中。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
<head>
...
</head>
<body>
...
<script type="text/javascript">
(function(f1){
...
};
DDC.dataLayer['a'] = {
...
};
DDC.dataLayer['b'] = [{
"b1": "b1",
"b2": "b2",
"b3": {"b31":"01","b32":"name"}
}];
DDC.dataLayer.c = {
aa: [],
bb: [],
cc: []
};
</script>
</body>
</html>

我设法将脚本标签之间的所有文本提取到一个变量中,但是,当我尝试对其使用 JSON.parse 时,由于函数 f1.xml 出现错误。我如何将 DDC.dataLayer['b'] 拉入 Postman 中的 JSON 对象?

谢谢!

【问题讨论】:

  • Ddc.datalayer 是函数内部还是外部的标识符?为什么不能简单地使用正则表达式?
  • 是函数外的标识符。唉,我不是正则表达式方面的专家,也不知道如何在 Postman 中使用它。

标签: javascript html json postman cheerio


【解决方案1】:
// find the start of the varaible you want 
start = a.indexOf("DDC.dataLayer['b'] =")+"DDC.dataLayer['b'] =".length;

//find the end using ';'
stop = a.indexOf(";",a.indexOf("DDC.dataLayer['b']"))

console.log(start,stop)

// find the substring and parse it
var res = a.substring(start,stop)

console.log(JSON.parse(res))

将此添加到您的测试脚本中

【讨论】:

    【解决方案2】:
    html.match(/DDC.dataLayer\['b'\] = (\[.*?\])/s)[1]
    

    ?让它不贪心

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 这样的作品,谢谢。您在我给出的 html 示例中做出了一些假设,但在真实的 HTML 中可能不正确。例如:“}];”多次出现并且它的格式并不总是相同(即:“}];”可能并不总是在同一行)。这可能会不时根据网站上的其他信息而有所不同,因此虽然使用子字符串可能会起作用,但它相当脆弱。
      猜你喜欢
      • 1970-01-01
      • 2021-01-23
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      相关资源
      最近更新 更多