Puppeteer (Chrome headless node API) based web page renderer.
Useful server side rendering through proxy. Outputs HTML, PDF and screenshots as PNG.
You can run Chromium or docker.
docker run -d --name renderer -p 8080:3000 ghcr.io/zenato/puppeteer-renderer:latest
pnpm install
pnpm dev
(service port: 3000)
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 `https://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: 'https://installed-your-puppeteer-renderer-url',
// userAgentPattern: /My-Custom-Agent/i,
// excludeUrlPattern: /*.html$/i
// timeout: 30 * 1000,
}));
// your service logics..
app.listen(8080);
Endpoint: /{html|pdf|screenshot}
Name | Required | Value | Description | Usage |
---|---|---|---|---|
url |
yes | Target URL | https://puppeteer-renderer/html?url=https://www.google.com |
|
animationTimeout |
Timeout in milliseconds | Waits for animations to finish before taking the screenshot. Only applicable to type screenshot |
https://puppeteer-renderer/screenshot?url=https://www.google.com&animationTimeout=3000 |
|
(Extra options) | Extra options (see puppeteer API doc) | https://puppeteer-renderer/pdf?url=https://www.google.com&scale=2 |
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 |
Copyright (c) 2017-present, Yeongjin Lee