Bruno运行登录接口遇到报错canotfoundmodule‘htmlparser2’怎么解决
- 创业
- 2025-09-11 22:00:01

在Bruno环境中我得脚本是这样的
const parser = require('htmlparser2'); const cssSelect = require('css-select') const {parseDocument} = parser; const dom = parseDocument(res.getBody()); const SAMLRequestElement = cssSelect.selectOne("input[name='SAMLRequest']", dom); if (SAMLRequestElement) { const SAMLRequestValue = SAMLRequestElement.attribs.value; bru.setVar("SAMLRequest", decodeURIComponent(SAMLRequestValue)); } else { console.error("SAMLRequest input element not found"); } const SignatureElement = cssSelect.selectOne("input[name='Signature']", dom); if (SignatureElement) { const SignatureValue = SignatureElement.attribs.value; bru.setVar("Signature", decodeURIComponent(SignatureValue)); } else { console.log("Signature input element not found"); } const SigAlgElement = cssSelect.selectOne("input[name='SigAlg']", dom); if (SigAlgElement) { const SigAlgValue = SigAlgElement.attribs.value; bru.setVar("SigAlg", decodeURIComponent(SigAlgValue)); } else { console.error("SigAlg input element not found"); } const RelayState = cssSelect.selectOne("input[name='RelayState']", dom).attribs.value; bru.setVar("RelayState", RelayState) console.log("RelayState is " + RelayState); const authenticityToken = cssSelect.selectOne("input[name='authenticity_token']", dom).attribs.value; bru.setVar("authenticityToken", authenticityToken) const spId = cssSelect.selectOne("input[name='spId']", dom).attribs.value; bru.setVar("spId", spId) const spName = cssSelect.selectOne("input[name='spName']", dom).attribs.value; bru.setVar("spName", spName) const idpSSOEndpoint = cssSelect.selectOne("input[name='idpSSOEndpoint']", dom).attribs.value; bru.setVar("idpSSOEndpoint", idpSSOEndpoint) const xsrfProtection = cssSelect.selectOne("input[name='xsrfProtection']", dom).attribs.value; bru.setVar("xsrfProtection", xsrfProtection) let cookies = res.getHeader("set-cookie"); if (cookies && cookies.length > 0) { let cookieDict = {}; cookies.forEach(cookie => { let parts = cookie.split(';'); let [name, value] = parts[0].split('='); name = name.trim(); value = value.trim(); cookieDict[name] = value; }); let cookieString = Object.keys(cookieDict).map(name => { return `${name}=${cookieDict[name]}`; }).join('; '); bru.setVar("cookies", cookieString); console.log("Combined cookie string with latest values:", cookieString); } else { console.error("No cookies found in the set-cookie header."); }由于 Bruno 是一个专注于 API 开发和测试的工具,它的脚本执行环境可能不支持典型的 Node.js 模块加载方式(如使用 require 来加载模块)。因此无法直接在 Bruno 中使用 Node.js 的 htmlparser2 或 css-select。以下是一些可以在不使用 Node.js 模块的情况下,在 Bruno 中实现类似的功能:
1. 使用浏览器原生方法解析 HTML:Bruno 的脚本环境类似于浏览器环境,可以使用浏览器提供的 API 来解析 HTML。
使用 DOMParser 解析 HTML: // Assuming `res.getBody()` returns the entire HTML as a string const parser = new DOMParser(); const doc = parser.parseFromString(res.getBody(), "text/html"); // Now you can use traditional DOM methods to find elements const SAMLRequestElement = doc.querySelector("input[name='SAMLRequest']"); if (SAMLRequestElement) { const SAMLRequestValue = SAMLRequestElement.value; bru.setVar("SAMLRequest", decodeURIComponent(SAMLRequestValue)); } else { console.error("SAMLRequest input element not found"); } // Continue similarly for other elements using `querySelector` or `querySelectorAll` 2. 检查和处理输入元素:确保在尝试访问属性之前先检查元素是否存在。对于不存在的元素,打印适当的错误信息。
3. 处理 Cookies:Bruno 脚本中的 Cookie 处理相对正常,因为它依赖于解析字符串来构建 Cookie 字典。确保字符串处理逻辑是正确的,这看起来已经做得很好。
4. 使用 Bruno 提供的 API:确保您使用的 bru.setVar 在 Bruno 中被正确调用并且可用。可以通过 Bruno 的文档来确认使用方法。
总结: 避免使用无法加载的 Node.js 模块:在 Bruno 中的脚本可能无法使用普通的 Node.js 模块,因此可以依靠原生浏览器 API 来操作 DOM。确保节点查找逻辑正确无误:使用 querySelector 和 querySelectorAll 来定位和操作 HTML 元素。处理和管理变量:充分利用 bru.setVar 进行变量设置、测试和调试。可以使用上文中的建议来修改和运行代码。调整后的代码不仅仅解决了模块加载的问题,还与浏览器环境下的原生功能保持一致。
Bruno运行登录接口遇到报错canotfoundmodule‘htmlparser2’怎么解决由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Bruno运行登录接口遇到报错canotfoundmodule‘htmlparser2’怎么解决”
上一篇
Vue3快速入门笔记
下一篇
面试逻辑智力测试题(带答案)