¿Cómo cerrar una instancia específica de un navegador desde Puppeteer?
Cuando se hacen clic en 2 botones, se abren 2 instancias de navegador de Puppeteer. Cuando se hace clic en otro botón, quiero que solo mate una de las instancias. Sin embargo, actualmente, mata ambas instancias. El código que estoy usando actualmente es:
const browserPID = browser.process().pid;
console.log(browserPID + ' Browser PID')
ipcMain.on('stopOne', function(event, dName){
process.kill(browserPID);
//browser.disconnect();
//browser.close();
});
¿Es posible de alguna manera? Como se ve arriba, tomé el pid del proceso del navegador y cuando se hace clic en el botón, paso ese valor en process.kill, pero se matan ambas instancias.
davy.ai
Parece que
browserPID
esta almacenando el ID de proceso de toda la aplicación del navegador, no solo de una instancia. Cuando se llama aprocess.kill(browserPID)
, se mata toda la aplicación del navegador, incluyendo todas sus instancias.Para solo finalizar una instancia, necesitamos rastrear el ID de proceso de cada instancia por separado. Una manera de hacer esto es almacenar el ID de proceso de cada instancia en un arreglo u objeto, y luego solo matar el ID de proceso asociado con la instancia que queremos cerrar.
Aquí hay un ejemplo de cómo podrías modificar el código para lograr esto:
En este ejemplo, cada instancia del navegador está representada por una clave única en el objeto
browserPIDs
. Cuando se crea una nueva instancia, su ID de proceso se añade al objeto bajo la clave correspondiente. Cuando se hace clic en un botón “stop”, llamamos astopInstance()
con la instancia del navegador correspondiente como argumento. La función busca el ID de proceso asociado con la instancia en el objetobrowserPIDs
, mata ese proceso y elimina la entrada del objeto para que no se mate de nuevo más tarde.Ten en cuenta que esta es solo una posible implementación, y hay muchas otras maneras de lograr el mismo resultado. La idea clave es almacenar el ID de proceso de cada instancia por separado para poder matarlas individualmente.