讲师中心 微信公众号

工具推荐

视频效率加速
updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Postman HTML响应解析指南:利用Cheerio实现高效数据提取

梦明同学_9399

梦明同学_9399

发布时间:2025-12-14 11:32:15

|

165人浏览过

|

来源于php中文网

原创

Postman HTML响应解析指南:利用Cheerio实现高效数据提取

postman测试脚本环境中解析html响应时,常见的`document`对象或`json.parse`方法均不适用。本文将详细介绍如何在postman中利用轻量级jquery api `cheerio`库,高效、准确地解析html内容,从而提取所需数据。通过具体示例,您将掌握在postman中处理html响应的专业技巧。

引言:Postman中HTML解析的挑战

在Postman的测试脚本(Pre-request Script或Tests)环境中,我们经常需要对API响应进行处理和验证。当API返回的响应是HTML格式而非JSON时,传统的解析方法会遇到障碍。

  1. document对象不可用: 许多前端开发人员习惯使用浏览器提供的document对象(如document.getElementsByClassName)来操作DOM。然而,Postman的脚本运行在一个Node.js-like的沙箱环境中,不具备完整的浏览器DOM环境,因此document对象是未定义的,直接调用会导致运行时错误。
  2. JSON.parse不适用: 当响应内容是HTML时,尝试使用JSON.parse(response)会因为内容格式不匹配而抛出解析错误,因为HTML并非有效的JSON结构。

面对这些挑战,我们需要一种专门为服务器端HTML解析设计的工具,它既能提供类似前端DOM操作的便利性,又能在Postman的沙箱环境中稳定运行。

Cheerio:Postman HTML解析的利器

cheerio是一个快速、灵活且精简的jQuery核心功能实现,专为服务器端解析HTML和XML而设计。它能够将HTML字符串加载到一个内存中的DOM结构,然后允许您使用熟悉的jQuery选择器语法来遍历、操作和提取数据。

cheerio的优势在于:

立即学习“前端免费学习笔记(深入)”;

  • jQuery-like API: 学习曲线平缓,熟悉jQuery的开发者可以迅速上手。
  • 轻量高效: 专为服务器端优化,解析速度快,内存占用低。
  • Postman内置支持: cheerio库在Postman的沙箱环境中是默认可用的,无需额外安装或导入。

在Postman中使用Cheerio解析HTML

使用cheerio在Postman中解析HTML响应的核心步骤包括加载HTML内容和使用选择器提取数据。

1. 加载HTML内容

首先,您需要从Postman的响应对象中获取原始的HTML文本,然后将其加载到cheerio实例中。

// 获取Postman响应的文本内容
const htmlResponseText = pm.response.text();

// 使用cheerio加载HTML文本,并获取一个类似jQuery的实例
const $ = cheerio.load(htmlResponseText);

在这里,pm.response.text()方法用于获取完整的响应体作为字符串。cheerio.load()函数则负责解析这个HTML字符串,并返回一个$对象,这个对象就拥有了与jQuery相似的所有选择和操作方法。

cn-json-diff
cn-json-diff

比较两个 JSON 文件并显示差异。支持嵌套结构、数组及值变更。纯 Python 标准库实现,无需 API 密钥。

下载

2. 选择器与数据提取

一旦HTML被加载,您就可以使用$对象以及标准的CSS选择器来查找元素并提取所需信息。

示例:提取页面标题

// 提取页面的<title>标签文本
const pageTitle = $("title").text();
console.log("页面标题:", pageTitle); // 在Postman控制台输出
pm.environment.set("extracted_page_title", pageTitle); // 将标题存入环境变量

示例:提取特定类名元素的文本

假设您想提取一个类名为mw-search-result-heading的元素内部的链接文本:

// 提取特定类名元素的文本
const resultHeadingText = $(".mw-search-result-heading a").text();
if (resultHeadingText) {
    console.log("搜索结果标题:", resultHeadingText);
    pm.environment.set("extracted_search_heading", resultHeadingText);
} else {
    console.log("未找到类名为'mw-search-result-heading'的元素。");
}

示例:提取所有链接的href属性

const allLinks = [];
// 遍历所有<a>标签
$("a").each((index, element) => {
    // 获取当前元素的href属性
    const href = $(element).attr('href');
    if (href) {
        allLinks.push(href);
    }
});
console.log("所有链接:", allLinks);
pm.environment.set("extracted_all_links", JSON.stringify(allLinks));

完整示例代码

以下是一个更完整的Postman测试脚本示例,演示了如何结合断言和错误处理来解析HTML响应:

// 1. 确保响应状态码为2xx
pm.test("响应状态码为200 OK", function () {
    pm.response.to.have.status(200);
});

// 2. 检查响应是否为HTML类型
pm.test("响应内容类型为HTML", function () {
    pm.expect(pm.response.headers.get('Content-Type')).to.include('text/html');
});

// 3. 使用Cheerio解析HTML
try {
    const $ = cheerio.load(pm.response.text());

    // 提取并验证页面标题
    const pageTitle = $("title").text();
    console.log("提取到的页面标题:", pageTitle);
    pm.environment.set("extracted_page_title", pageTitle); // 存储到环境变量
    pm.test("页面标题不为空", function () {
        pm.expect(pageTitle).to.not.be.empty;
    });

    // 提取特定CSS选择器下的文本内容
    // 假设目标HTML中有一个ID为'main-content'的div,里面有一个h1标签
    const mainHeading = $("#main-content h1").text();
    if (mainHeading) {
        console.log("主要内容标题:", mainHeading);
        pm.environment.set("extracted_main_heading", mainHeading);
        pm.test("主要内容标题包含特定文本", function () {
            pm.expect(mainHeading).to.include("欢迎"); // 假设标题包含“欢迎”
        });
    } else {
        console.log("未找到ID为'main-content'下的h1元素。");
    }

    // 提取所有图片(img标签)的src属性
    const imageUrls = [];
    $("img").each((index, element) => {
        const src = $(element).attr('src');
        if (src) {
            imageUrls.push(src);
        }
    });
    console.log("所有图片URL:", imageUrls);
    pm.environment.set("extracted_image_urls", JSON.stringify(imageUrls));
    pm.test("页面中存在图片", function () {
        pm.expect(imageUrls).to.not.be.empty;
    });

} catch (e) {
    // 捕获解析过程中的任何错误
    pm.test("HTML解析失败", function () {
        pm.expect.fail(`解析HTML时发生错误: ${e.message}`);
    });
}

注意事项

  • 环境限制: 尽管cheerio提供了类似jQuery的API,但它在Postman的沙箱环境中运行,是一个服务器端的DOM模拟。这意味着它不具备浏览器中document对象的完整功能,例如无法执行JavaScript、处理事件或进行页面渲染。它主要用于静态HTML内容的解析和数据提取。
  • 错误处理: HTML结构可能因各种原因(如页面改版、网络错误)而发生变化。在您的脚本中,务必加入健壮的错误处理机制,例如使用try-catch块来捕获cheerio.load()或选择器操作可能引发的错误,并对选择器返回空结果的情况进行判断,避免脚本中断。
  • 响应类型验证: 在尝试解析之前,最好通过检查响应头中的Content-Type来确认响应确实是HTML。这可以防止对非HTML内容(如纯文本、二进制文件)进行不必要的cheerio解析。
  • 性能考量: 对于非常庞大或复杂的HTML响应,cheerio的解析过程可能会消耗一定的CPU和内存资源。在设计测试时,请考虑响应的大小和解析的频率。

总结

cheerio为Postman中的HTML响应解析提供了一个强大而熟悉的解决方案。通过利用其jQuery-like的API,您可以轻松地从HTML内容中提取所需的数据,从而实现更灵活、更全面的API测试和断言。掌握cheerio的使用,将极大地扩展您在Postman中处理各种API响应的能力,特别是当面对那些返回HTML而不是结构化数据的传统Web页面API时。将其集成到您的测试流程中,将使您的Postman测试脚本更加专业和健壮。

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2295

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3782

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1256

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4379

2025.09.10

jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

621

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1256

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2342

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

2168

2023.12.04

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn