树莓派B上Node-RED中使用Playwright生成截图遇require未定义问题求助
在Node-RED中使用Playwright生成网页截图的解决方案
问题背景
在树莓派B上,单独运行的Playwright截图JS代码可正常执行,但将代码粘贴到Node-RED函数块时,出现错误:
11/8/2023, 2:24:40 PMnode: function 1
function : (error)
"ReferenceError: require is not defined (line 2, col 22)"
同时尝试安装node-red-contrib-playwright节点时,遇到无文档且无法添加的问题。
解决方案一:修复函数节点的require限制
Node-RED的函数节点默认禁用了require方法,需通过全局上下文配置引入模块:
- 打开Node-RED的配置文件(路径通常为
~/.node-red/settings.js) - 找到
functionGlobalContext配置项,添加playwright模块:functionGlobalContext: { // 保留原有配置,新增以下行 playwright: require('playwright') }, - 重启Node-RED服务
- 修改函数节点中的代码,从全局上下文获取Playwright:
注意:树莓派上可能需要手动指定Chromium的可执行路径,否则会出现浏览器找不到的错误。const { chromium } = global.get('playwright'); (async () => { const browser = await chromium.launch({ headless: true, // 树莓派环境需指定Chromium路径,示例: // executablePath: '/usr/bin/chromium-browser' }); const context = await browser.newContext(); const page = await context.newPage(); await page.goto('https://www.wikipedia.org/'); // 建议使用绝对路径保存截图,避免权限或路径问题 await page.screenshot({path:'/home/pi/wiki.png'}) await context.close(); await browser.close(); })();
解决方案二:通过exec节点执行外部JS文件
如果不想修改Node-RED配置,可直接用exec节点运行外部脚本:
- 将你的Playwright代码保存为独立JS文件,比如
/home/pi/scripts/wiki-screenshot.js - 在Node-RED编辑器中添加
exec节点,配置执行命令:node /home/pi/scripts/wiki-screenshot.js - 使用
注入节点触发exec节点,执行截图脚本 - 确保Node-RED运行用户(通常是pi)拥有该脚本的读取权限,以及截图保存目录的写入权限。
内容的提问来源于stack exchange,提问作者steve99
相关产品推荐
相关产品推荐

