2.0.1 • Published 5 years ago

@eu-ge-ne/puppeteer-pool v2.0.1

Weekly downloads
18
License
MIT
Repository
github
Last release
5 years ago

@eu-ge-ne/puppeteer-pool

Page pooling for Puppeteer. Written in TypeScript. Each page is opened in new browser instance.

Install | Example | API | License

npm.io npm version

Install

$ npm install @eu-ge-ne/puppeteer-pool

Example

import { PuppeteerPool } from "@eu-ge-ne/puppeteer-pool";

const pool = new PuppeteerPool({
    concurrency: 100,
    launchOptions: {
        headless: true,
    },
});

let page!: Page;

try {
    page = await pool.acquire();
    page.on("error", err => console.log(err));
} finally {
    if (page) {
        pool.close(page);
    }
}

API

Create instance

import { PuppeteerPool, LaunchOptions } from "@eu-ge-ne/puppeteer-pool";

/**
 * Concurrency of the pool
 * Defaults to 1
 */
const concurrency = 100;

/**
 * Maximum time in milliseconds to wait for acquire
 * Defaults to 30_000
 * Should be equal or greater than launchOptions.timeout
 */
const acquireTimeout: number = 60_000;

/**
 * Options, provided to default puppeteer.launch()
 */
const launchOptions: LaunchOptions = {};

const pool = new PuppeteerPool({ concurrency, acquireTimeout, launchOptions });

Or, provide launch option with function () => Promise<Browser>:

import { PuppeteerPool, launch } from "@eu-ge-ne/puppeteer-pool";

const pool = new PuppeteerPool({
    concurrency: 100,
    launch: () => launch({
        headless: true,
    }),
});

Acquire page

const page = await pool.acquire();

Close page

pool.close(page);

Close all pages

pool.closeAll();

Get stats

const stats = pool.stats();

const {
    // array of browser descriptors
    browsers: [
        {
            // browser instance lifetime in ms
            // (instance will be destroyed when `counter === concurrency` and `active === 0`)
            lifetime,
            // number of pages, opened by this browser instance
            // (max value is equal to `concurrency` parameter)
            counter,
            // number of active pages
            active,
        },
        ...rest
    ],
    acquireTime: {
        // max acquire time
        max,
        // mean acquire time
        mean,
    }
} = stats;

Events

after_acquire

Emitted after page acquired. Useful for additional page setup:

const pool = new PuppeteerPool<{ attempt: number }>({ concurrency: 100 });

pool.on("after_acquire", (page, opts) => {
    const timeout = opts.attempt * 1000 * 60;

    page.setDefaultNavigationTimeout(timeout);
    page.setDefaultTimeout(timeout);
});

// ...

const page = await pool.acquire({ attempt });

page.on("error", err => console.log(err));
page.on("console", msg => console.log(msg));

after_close

Emitted after page closed. For example can be used for unsubscribing:

// ...

pool.on("after_close", page => page.removeAllListeners());

error

Emitted when error occurred

// ...

pool.on("error", err => console.log(err));

License

MIT

2.0.1

5 years ago

2.0.0

5 years ago

1.5.0

5 years ago

1.4.3

5 years ago

1.4.2

5 years ago

1.4.1

5 years ago

1.3.2

5 years ago

1.4.0

5 years ago

1.3.1

6 years ago

1.2.0

6 years ago

1.3.0

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago