Puppeteer中browser.pages()[0]调用page.goto连续跳转失败问题
Puppeteer中browser.pages()[0]跳转URL报错的解决方法
问题原因
你遇到的TypeError: Cannot read properties of undefined (reading 'goto')错误,核心是错误处理了browser.pages()的异步返回值:
browser.pages()是异步方法,返回的是Promise对象,而非直接的页面数组- 你的代码
const page = await browser.pages()[0]逻辑错误:先尝试读取Promise的索引0(结果为undefined),再对undefined执行await,最终page变量为undefined,自然无法调用goto方法
而browser.newPage()是正确的异步调用,await browser.newPage()能获取到有效的Page实例,因此连续跳转可正常运行。
修正后的代码
先通过await获取完整的页面数组,再取第一个元素:
const puppeteer = require('puppeteer-core'); (async () => { const browser = await puppeteer.launch({ executablePath: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe', headless: false }) // 先await拿到页面数组,再取第一个页面 const pages = await browser.pages(); const page = pages[0]; const urls = ['https://www.google.com/', 'https://www.yahoo.com/'] for (let i = 0; i < urls.length; i++) { const url = urls[i]; await page.goto(`${url}`) } await browser.close() })()
额外注意事项
- 非无头模式启动Chrome时,默认会打开一个初始标签页(即
pages[0]),但无头模式下可能没有初始页面,此时pages[0]会是undefined,建议增加兜底判断:const pages = await browser.pages(); const page = pages[0] || await browser.newPage();
内容的提问来源于stack exchange,提问作者TryCatchFinally
相关产品推荐
相关产品推荐

