Node.js 是否使用相同的浏览器实例?
嗨,我想做一个截图服务Node.js 是否使用相同的浏览器实例?,node.js,google-chrome,puppeteer,Node.js,Google Chrome,Puppeteer,嗨,我想做一个截图服务 const puppeteer = require('puppeteer'); var resWidth = 1366; var resHeight = 1000; var browser; (async () => { browser = await puppeteer.launch({ignoreHTTPSErrors: true}); }); 当我收到一份工作时,我会尽力去做 data.forEach(function(d){ try {
const puppeteer = require('puppeteer');
var resWidth = 1366;
var resHeight = 1000;
var browser;
(async () => {
browser = await puppeteer.launch({ignoreHTTPSErrors: true});
});
当我收到一份工作时,我会尽力去做
data.forEach(function(d){
try {
console.log(d["url"]);
(async () => {
var page = await browser.newPage();
await page.setViewport({width: resWidth, height: resHeight});
await page.goto(d["url"], {timeout: 90000, waitUntil: 'networkidle'});
await page.screenshot({path: './picdata/' + d['id'] + '.png' ,fullPage: true});
await page.close();
})();
} catch(e) {}
});
但是我不能。。。以下是错误:
(node:40596) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 7): TypeError: Cannot read property 'newPage' of undefined
我不想为每个屏幕截图打开新浏览器启动浏览器需要时间和更多内存
我该怎么办 问题:
异步=>{
browser=wait puppeter.launch{ignoreHTTPSErrors:true};
};
这段代码永远不会执行。为什么?因为这不是一个真正的结束
有关闭包的更多信息
也就是说,这对于您给定的场景是不可行的,因为它们是异步任务
我试着以你为例:
'use strict';
const puppeteer = require('puppeteer');
const resWidth = 1366;
const resHeight = 1000;
let browser;
let page;
async function launchBrowser() {
browser = await puppeteer.launch({ headless: true }); //this "{ headless: true }" will ensure a browser window is not open a single time.
};
launchBrowser().then((x) => { // wait until browser has launched
data.forEach(async (d) => {
try {
page = await browser.newPage(); // the document is not very clear about this method, so I am still unsure if I could move this in the above launchBrowser() method.
await page.setViewport({ width: resWidth, height: resHeight });
await page.goto(d['url'], { timeout: 90000, waitUntil: 'networkidle' });
await page.screenshot({ path: './picdata/' + d['id'] + '.png', fullPage: true });
}
catch (e) {
console.log(e);
await browser.close(); // close browser if there is an error
}
});
})
.then(() => {
await browser.close(); // close browser finally.
});
专业提示:开始使用let、const而不是var
关于这方面有一篇很棒的文章,i解决了var browser=null;puppeter.launch.thentempBrowser=>browser=tempBrowser;