Skip to content

Puppeteer(Chrome headless node API) based web page renderer

License

Notifications You must be signed in to change notification settings

zenato/puppeteer-renderer

Repository files navigation

Puppeteer(Chrome headless node API) based web page renderer

Puppeteer (Chrome headless node API) based web page renderer.

Useful server side rendering through proxy. Outputs HTML, PDF and screenshots as PNG.

Requirements

You can run Chromium or docker.

Getting Started

Start server using docker (If you can not run Chromium and installed docker)

docker run -d --name renderer -p 8080:3000 ghcr.io/zenato/puppeteer-renderer:latest

Local (git clone)

pnpm install

Start server (If you can run Chromium)

pnpm dev (service port: 3000)

Locally build the image

docker build . --file ./Dockerfile --tag local/puppeteer-renderer --build-arg SCOPE=puppeteer-renderer

docker run -d --name renderer -p 8080:3000 local/puppeteer-renderer


### Test on your browser
Input url `http://localhost:{port}/{html|pdf|screenshot}?url=https://www.google.com`

If you can see html code, server works fine.

### Puppeteer customization

When starting `pnpm {dev|start}` or docker container you can customize puppeteer using environment variables.

- `IGNORE_HTTPS_ERRORS=true` - Ignores HTTPS errors
- `PUPPETEER_ARGS='--host-rules=MAP localhost yourproxy'` - Ads additional args that will be passed to puppeteer. Supports multiple arguments.

## Integration with existing service.

If you have active service, set proxy configuration with middleware.
See [puppeteer-renderer-middleware](packages/middleware/README.md) for express.

```ts
import express from 'express'
import renderer from 'puppeteer-renderer-middleware'

const app = express()

app.use('/render-proxy', renderer({
  url: 'http://installed-your-puppeteer-renderer-url',
  // userAgentPattern: /My-Custom-Agent/i,
  // excludeUrlPattern: /*.html$/i
  // timeout: 30 * 1000,
}));

// your service logics..

app.listen(8080);

API

Endpoint: /{html|pdf|screenshot}

Name Required Value Description Usage
url yes Target URL http://puppeteer-renderer/html?url=http://www.google.com
animationTimeout Timeout in milliseconds Waits for animations to finish before taking the screenshot. Only applicable to type screenshot http://puppeteer-renderer/screenshot?url=http://www.google.com&animationTimeout=3000
(Extra options) Extra options (see puppeteer API doc) http://puppeteer-renderer/pdf?url=http://www.google.com&scale=2

PDF File Name Convention

Generated PDFs are returned with a Content-disposition header requesting the browser to download the file instead of showing it. The file name is generated from the URL rendered:

URL Filename
https://www.example.com/ www.example.com.pdf
https://www.example.com:80/ www.example.com.pdf
https://www.example.com/resource resource.pdf
https://www.example.com/resource.extension resource.pdf
https://www.example.com/path/ path.pdf
https://www.example.com/path/to/ pathto.pdf
https://www.example.com/path/to/resource resource.pdf
https://www.example.com/path/to/resource.ext resource.pdf

License

MIT

Copyright (c) 2017-present, Yeongjin Lee