gpt4 book ai didi

javascript - 如何保存页面对象以供以后使用?

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:46 25 4
gpt4 key购买 nike

我的 puppeteer 操纵者将有多个用户访问它,但在他们访问之后或开始之前,我想跟踪他们打开的页面,如果他们想要执行更多操作或不想执行更多操作。如果没有执行任何操作,请在 30 分钟内关闭页面。

有没有页面ID或者我可以使用的东西,我看到有browser.pages来获取索引,但不知道如何使用这个功能。

我的应用程序是一个 REST 服务器,用户将在其中发布请求,puppeteer 将执行一些任务。

最佳答案

概念

当请求到来时,会调用一个函数,为用户 ID 创建一个页面并将该页面存储在 Map 中。供以后使用。然后,当第二个请求命中时,您从 map 中获取现有页面,执行“完成”任务并随后关闭页面。

示例代码

为简单起见,此示例使用 express 。该代码启动一个服务器并注册两个函数:

  • /open?userid=XXX 将调用给定用户 ID 的启动任务
  • /close?userid=XXX 将调用给定用户 ID 的完成任务

这是一个没有错误处理或边缘情况的最小示例(例如,如果您调用 open 函数两次而不调用 close 会发生什么情况)。

const express = require('express');
const app = express();
const puppeteer = require("puppeteer");

// contains the open pages (per userid)
const openPages = new Map();

// setup task, creates page
async function openTask(userid, browser) {
// create page and save in our map
const page = await browser.newPage();
openPages.set(userid, page);

// execute start task on page
await page.goto('http://www.google.com/');
// ...

// always call closeTask after 30min
setTimeout(() => closeTask(userid), 30 * 60 * 1000);
}

// end task, closes page
async function closeTask(userid) {
const page = openPages.get(userid);
if (!page) {
return;
}

// execute end task on page and close page after that
// ...
await page.close();
}

(async () => {
const browser = await puppeteer.launch();

// Called like this: /open?userid=123
app.get('/open', async function (req, res) {
const userid = req.query.userid;
await openTask(userid, browser);
res.end(`open finished for userid ${userid}`);
});

// Called like this: /close?userid=123
app.get('/close', async function (req, res) {
const userid = req.query.userid;
await closeTask(userid, browser);
res.end(`close finished for userid ${userid}`);
});

app.listen(3000);
})();
<小时/>

页面、上下文、浏览器

根据您的任务,您应该考虑使用 browsers 是否更有意义或contexts而不是页面。这将使任务彼此更加独立,这意味着如果一个浏览器崩溃,不会影响任何其他任务。另外,使用页面也会使所有任务共享cookie。

关于javascript - 如何保存页面对象以供以后使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55552451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com