Сохраните экземпляр браузера в process.env - PullRequest
0 голосов
/ 26 марта 2020

Я использую API с express. Я поставил запуск браузера как промежуточное ПО.

// app.js

require('dotenv').config();
require('./config/puppeteer');
...
const app = express();
...

В конфигурации кукловода для запуска браузера я использую puppeteer.launch([options]), а затем сохраняю объект в porcess.env.BROWSER

// config/puppeteer.js

const puppeteer = require('puppeteer');

(async function runBrowser() {
    const browser = await puppeteer.launch({
        headless: process.env.NODE_ENV === 'development' ? false : true,
        slowMo: 10,
    });;
    process.env.BROWSER = JSON.stringify(browser);
})();

Но когда я делаю JSON.stringify из браузера, я получаю следующую ошибку:

DevTools listening on ws://127.0.0.1:56296/devtools/browser/3069f03b-0a46-4d59-b378-c38e650cba65
(node:17192) UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'Browser'
    |     property '_defaultContext' -> object with constructor 'BrowserContext'
    --- property '_browser' closes the circle
    at JSON.stringify (<anonymous>)
    at runBrowser (C:\Users\jcortes\devs\nodejs\scraper\config\puppeteer.js:9:32)

1 Ответ

0 голосов
/ 27 марта 2020

Я запустил браузер в файле config/puppeteer.js с runBrowser(). После запуска я сохраняю адрес веб-сокета для последующего подключения к тому же экземпляру (puppeteer.connect()). Таким образом, я могу использовать один и тот же браузер, и каждый раз, когда приходит запрос, он создает новую страницу.

// config/puppeteer.js

const puppeteer = require('puppeteer');

(async function runBrowser() {
    const browser = await puppeteer.launch({
        headless: process.env.NODE_ENV === 'development' ? false : true,
        slowMo: 10
    });
    process.env.WSENDPOINT = browser.wsEndpoint();
})();

...
// app.js

require('dotenv').config();
require('./config/puppeteer');
...
const app = express();
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...