如何通过Puppeteer执行带await的DevTools命令并获取返回值?
Puppeteer执行带await的函数返回undefined的解决方法
你当前的代码里有两处关键错误导致返回undefined:
- 把异步调用语句用引号包裹成了字符串,相当于没有执行任何有效逻辑
- 没有主动返回异步函数的执行结果,
page.evaluate需要明确返回值才能传递到Node.js环境
修正后的代码如下:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('http://localhost:3000'); // 补充协议头,避免解析异常 // 去掉多余引号,主动返回异步函数的执行结果 const s = await page.evaluate(async () => { return await nindo(this.endpoint); }); console.log(s); await browser.close(); })();
额外注意事项:
- 确保
nindo函数在页面的浏览器环境中是可访问的,和你在DevTools中执行时的环境一致 - 如果
this.endpoint在evaluate回调中的指向不符合预期,可以直接替换为具体的端点字符串,或者先在页面上下文里确认this的指向 page.goto的URL建议补充http://或https://,避免Puppeteer因URL格式问题抛出错误
内容的提问来源于stack exchange,提问作者Cost
相关产品推荐
相关产品推荐

