Кукловод: несколько пользовательских запросов к одному и тому же экземпляру Chromium

Чтобы, надеюсь, сэкономить на системных ресурсах, я хочу запускать пользовательские запросы через ту же версию Chromium в Puppeteer.

Если пользователь отправляет форму на моем сайте, которая вызывает Puppeteer, а Chromium уже запущен, как я могу использовать один и тот же экземпляр Chromium максимум на 4 вкладках?

Если в экземпляре Chromium открыто более 4 вкладок, я хочу запустить новый экземпляр Chromium.

Как я могу этого добиться? Нужно ли мне сохранять browserWSEndpoint экземпляра Chromium в файл, а затем извлекать его каждый раз, когда новый пользователь отправляет запрос? (Это будет использовать browserWSEndpoint с puppeteer.connect()).

Если мне нужно сделать это таким образом, допустим, есть 2 активных браузера Chromium. Самый последний браузер имеет максимум четыре открытых вкладки, поэтому я не смог использовать этот браузер. Затем я бы проверил следующие browserWSEndpoint и, если осталось менее 4 открытых вкладок, создал новую страницу; а если нет, запустите новый браузер.

Звучит нормально?


person turrican_34    schedule 23.03.2018    source источник


Ответы (1)


Вы можете использовать Lambda, что сэкономит ваши деньги, убедитесь, что вы не используете 30-секундный тайм-аут лямбда, если вы собираетесь использовать API Gateway.

https://github.com/alixaxel/chrome-aws-lambda

NodeJS

const chromium = require('chrome-aws-lambda');

exports.handler = async (event, context) => {
  let result = null;
  let browser = null;

  try {
    browser = await chromium.puppeteer.launch({
      args: chromium.args,
      defaultViewport: chromium.defaultViewport,
      executablePath: await chromium.executablePath,
      headless: chromium.headless,
    });

    let page = await browser.newPage();

    await page.goto(event.url || 'https://example.com');

    result = await page.title();
  } catch (error) {
    return context.fail(error);
  } finally {
    if (browser !== null) {
      await browser.close();
    }
  }

  return context.succeed(result);
};
person Anass Kartit    schedule 12.06.2019
comment
Интересно. Как использование лямбда снижает затраты / ресурсы? Я получил это очень похоже на то, как я описал, добавив browserWSEndpoint в файл и создав новую конечную точку, когда в текущем экземпляре хрома открыты 4 вкладки. Он работает хорошо, но если я смогу сэкономить ресурсы, сделав это по-другому, это было бы здорово. - person turrican_34; 16.06.2019