node.js - 是否可以使用其 contextId 关闭 Puppeteer 浏览器?

标签 node.js puppeteer

这是我之前问过的一个问题的更新,但当我问这个问题时并没有直接思考(我对我的解决方案采取了非常落后的方法)。我目前正在使用 Puppeteer,我正在尝试在特定任务和 puppeteer 浏览器实例之间创建关联。现在我正在使用以下方法获取浏览器的上下文 ID:

const {browserContextId} = await browser._connection.send('Target.createBrowserContext');
我将它与与任务相关的其他详细信息一起存储在一个文件中。我的目标是以某种方式能够使用存储的上下文 id 关闭该浏览器实例。我给了 this issue在 Puppeteer 的 GitHub 上阅读,希望它会以某种方式有所帮助,但似乎它对我不是很有帮助,因为它与我正在做的事情并没有真正的关系。
真正的问题是我将在一个文件中生成浏览器实例并尝试在另一个文件中关闭它们,否则这根本就不是问题。现在我唯一能做的就是使用上下文 id 生成另一个浏览器实例(对我的任务几乎没用)并且没有成功关闭它或 disposing it .
任何帮助将不胜感激,谢谢!
附言如果有更好的方法来解决这个关联问题,我会全力以赴!

最佳答案

事实证明,我想得太多了,并试图让它变得太复杂。对于任何试图做类似事情的人,我会在这里为您留下我的解决方案。
我发现不使用浏览器的上下文 id,而是获取浏览器的进程 id (pid) 更容易。从那里我可以根据运行 close 命令的位置使用不同的策略终止进程。
对于 Node.js:

// Lets say for example we're instantiating our browser like this
const browser = await puppeteer.launch({ headless: false });

// You can simply run this to get the browser's pid
const browserPID = browser.process().pid

// Then you can either store it for use later
fs.writeFile(file, JSON.stringify(jsondata, null, 4), (err) => {
    if (err) console.log(err);
})

// Or just kill the process
process.kill(browserPID);

请记住,如果您要存储 PID,则需要读取文件并解析数据以传递到 process.kill命令。
对于通过电子 react
// Require process from the electron file
const process = window.require('process');

// Then same process as before
process.kill(yourbrowserPID);
希望我的愚蠢可以在 future 帮助某人,如果他们正在尝试做类似的事情。这比我想象的要容易得多。

关于node.js - 是否可以使用其 contextId 关闭 Puppeteer 浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66880326/

相关文章:

javascript - puppeteer 师/Node.js : Can I run a script non-stop 24/7?

azure - 发布到 Azure 应用服务时,Puppeteer 不起作用

mysql - Knex 和 node.js 我如何深入研究返回对象

javascript - 使用 Future 在一系列异步调用后返回

javascript - 使用 Puppeteer 进行并发页面抓取

javascript - JS 图像抓取

javascript - 对来自特定启动器/源的 iframe 的加载和执行时间进行基准测试

node.js - Express.js 中的“ session ”未定义

javascript - 尝试停止流 : TypeError: _stream. abort 不是一个函数?

javascript - 将对象的所有键转换为小写的最佳方法(最有效)是什么?