J'utilise marionnettiste sur express/node/ubuntu comme suit:
var puppeteer = require('puppeteer');
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
(async () => {
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);
let bodyHTML = await page.evaluate(() => document.body.innerHTML);
res.send(bodyHTML)
await browser.close();
})();
});
exécuter ce script plusieurs fois laisse des centaines de zombies:
$ pgrep chrome | wc -l
133
Qui obstrue le srv,
Comment puis-je réparer ça?
L'exécution de kill
à partir d'un script Express JS pourrait le résoudre?
Existe-t-il une meilleure façon d'obtenir le même résultat que le marionnettiste et le chrome sans tête?
Je le résous avec https://www.npmjs.com/package/shelljs
var Shell = require('shelljs');
Shell.exec('pkill chrome')
essayez de fermer le navigateur avant d'envoyer la réponse
var puppeteer = require('puppeteer');
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
(async () => {
headless = true;
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
url = req.query.url;
await page.goto(url);
let bodyHTML = await page.evaluate(() => document.body.innerHTML);
await browser.close();
res.send(bodyHTML);
})();
});
J'ai rencontré le même problème et bien que votre solution shelljs ait fonctionné, elle tue tous les processus chrome, ce qui pourrait interrompre celui qui traite toujours une demande. Voici une meilleure solution qui devrait fonctionner.
var puppeteer = require('puppeteer');
var express = require('express');
var router = express.Router();
router.get('/', function (req, res, next) {
(async () => {
await puppeteer.launch({ headless: true }).then(async browser => {
const page = await browser.newPage();
url = req.query.url;
await page.goto(url);
let bodyHTML = await page.evaluate(() => document.body.innerHTML);
await browser.close();
res.send(bodyHTML);
});
})();
});