Puppeteer doesn't close browser

后端 未结 6 1983
逝去的感伤
逝去的感伤 2021-02-13 20:15

I\'m running puppeteer on express/node/ubuntu as follow:

var puppeteer = require(\'puppeteer\');
var express = require(\'express\');
var router = express.Router(         


        
6条回答
  •  误落风尘
    2021-02-13 20:54

    Ahhh! This is a simple oversight. What if an error occurs and your await browser.close() never executes thus leaving you with zombies.

    Using shell.js seems to be a hacky way of solving this issue.

    The better practice is to use try..catch..finally. The reason being you would want the browser to be closed irrespective of a happy flow or an error being thrown. And unlike the other code snippet, you don't have to try and close the browser in the both the catch block and finally block. finally block is always executed irrespective of whether an error is thrown or not.

    So, your code should look like,

    const puppeteer = require('puppeteer');
    const express = require('express');
    
    const router = express.Router();
    
    /* GET home page. */
    router.get('/', function(req, res, next) {
      (async () => {
        try {
          headless = true;
          const browser = await puppeteer.launch({
            headless: true,
            args: ['--no-sandbox'],
          });
          const page = await browser.newPage();
          url = req.query.url;
          await page.goto(url);
          const bodyHTML = await page.evaluate(() => document.body.innerHTML);
          res.send(bodyHTML);
        } catch (e) {
          console.log(e);
        } finally {
          await browser.close();
        }
      })();
    });
    
    

    Hope this helps!

提交回复
热议问题