我尝试在新的 NodeJS 项目中安装 Puppeteer。当我尝试启动浏览器并截取屏幕截图时,它不起作用。
我做到了:
npm init -y
index.js
npm i puppeteer
index.js
中写入以下代码:
import * as puppeteer from 'puppeteer';
(async ()=> {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://github.com/puppeteer/puppeteer');
await page.screenshot({path: 'my.png'});
// await browser.close();
});
node index.js
它既不打开浏览器也不创建屏幕截图。
您在
IIFE之后需要
()
:});
应该是 })();
。否则,该函数已定义但从未执行。
调试此问题的一个好方法是在 IIFE 顶部添加健全性检查
console.log("running")
。如果它没有运行,但 IIFE 之外的另一个健全性检查 console.log("running")
运行了,那么您就会发现该函数从未被调用过。
请注意,您正在无头运行,因此在修复 IIFE 问题后,不会打开任何可见浏览器仍然是预期行为。脚本的预期行为是它将运行、创建屏幕截图,然后永远挂起,因为
browser.close()
已被注释掉,需要您按 Ctrl+c 来终止它。如果您想看到浏览器打开,请使用 browser.launch({headless: false})
。
我建议使用以下 Puppeteer 样板:
const puppeteer = require("puppeteer"); // module import is fine too
let browser;
(async () => {
browser = await puppeteer.launch({headless: "new"});
const [page] = await browser.pages();
// your page code
})()
.catch(err => console.error(err))
.finally(() => browser?.close());
出于多种主要和次要原因,这是最佳的:
try
/catch
层。